64 lines
2.9 KiB
JavaScript
64 lines
2.9 KiB
JavaScript
// 深度诊断:按机器人的完整流程开弹窗→点打招呼,抓每一步的真实状态
|
||
const pw = require('playwright-core');
|
||
(async () => {
|
||
const b = await pw.chromium.connectOverCDP('http://127.0.0.1:9223');
|
||
const p = b.contexts()[0].pages().find(x => /recommend/.test(x.url()));
|
||
|
||
// 1. 找一个没打过招呼的卡片(按钮是"打招呼"而不是"继续沟通")
|
||
const idx = await p.evaluate(() => {
|
||
const cards = [...document.querySelectorAll('.recommend-item')];
|
||
for (let i = 0; i < cards.length; i++) {
|
||
const t = cards[i].querySelector('.cv-test-recommend-chat')?.innerText?.trim();
|
||
if (t === '打招呼') return i;
|
||
}
|
||
return -1;
|
||
});
|
||
console.log('待打招呼卡片索引:', idx);
|
||
if (idx < 0) { console.log('当前可见卡片都已打过招呼'); process.exit(0); }
|
||
|
||
// 2. 开弹窗
|
||
await p.evaluate((i) => {
|
||
document.querySelectorAll('.recommend-item')[i].querySelector('.resume-item__content')?.click();
|
||
}, idx);
|
||
await new Promise(r => setTimeout(r, 3500));
|
||
|
||
// 3. 抓弹窗完整状态
|
||
const st = await p.evaluate(() => {
|
||
const m = document.querySelector('.new-shortcut-resume__modal');
|
||
if (!m) return { modalOpen: false };
|
||
const btn = m.querySelector('button.km-button--primary.km-button--filled');
|
||
return {
|
||
modalOpen: true,
|
||
name: m.innerText.split('\n')[0]?.slice(0, 15),
|
||
btnText: btn?.innerText?.trim() || '(无)',
|
||
btnDisabled: btn?.disabled ?? null,
|
||
// 弹窗里有没有任何提示性文案
|
||
hints: (m.innerText.match(/(上线|上限|权益|开通|会员|到期|联系顾问)[^\n]{0,20}/g) || []).slice(0, 3),
|
||
};
|
||
});
|
||
console.log('弹窗状态:', JSON.stringify(st, null, 1));
|
||
|
||
// 4. 点按钮 + 监听点击后的网络请求结果(打招呼API的响应)
|
||
if (st.modalOpen && st.btnText === '打招呼') {
|
||
const respPromise = p.waitForResponse(r => /greet|chat|hello|im\//i.test(r.url()), { timeout: 12000 }).catch(() => null);
|
||
await p.evaluate(() => {
|
||
const btn = document.querySelector('.new-shortcut-resume__modal button.km-button--primary.km-button--filled');
|
||
btn?.click();
|
||
});
|
||
const resp = await respPromise;
|
||
if (resp) {
|
||
let body = '';
|
||
try { body = (await resp.text()).slice(0, 200); } catch { }
|
||
console.log('API响应:', resp.status(), resp.url().slice(0, 70), body);
|
||
} else {
|
||
console.log('点击后12秒内无相关网络请求(请求都没发出)');
|
||
}
|
||
// 最终按钮态
|
||
await new Promise(r => setTimeout(r, 3000));
|
||
const fin = await p.evaluate(() => document.querySelector('.new-shortcut-resume__modal button.km-button--primary.km-button--filled')?.innerText?.trim());
|
||
console.log('最终按钮态:', JSON.stringify(fin));
|
||
await p.evaluate(() => document.querySelector('.new-shortcut-resume__close')?.click()).catch(() => { });
|
||
}
|
||
process.exit(0);
|
||
})().catch(e => { console.log('ERR:', String(e).slice(0, 120)); process.exit(1); });
|