Files
zhaopin/scripts/diag-greet.js
T

64 lines
2.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 深度诊断:按机器人的完整流程开弹窗→点打招呼,抓每一步的真实状态
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); });