被顶号告警升级: 自动关闭被顶弹窗→刷新→登录页抓二维码发群(与登录失效同样式, 含'今日不需要可忽略'说明)
This commit is contained in:
+36
-3
@@ -74,6 +74,40 @@ function notifyLoginExpired() {
|
|||||||
send(GROUP, `🚨 当前${label}账号登录已失效,今日筛选中止,请在任务机重新登录智联`);
|
send(GROUP, `🚨 当前${label}账号登录已失效,今日筛选中止,请在任务机重新登录智联`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 被顶号告警:先关闭被顶弹窗/刷新页面 → 导航到登录页抓二维码 → 发群(文字+二维码+说明)
|
||||||
|
async function notifyKickedOut(chatLeft) {
|
||||||
|
const label = `${ACCT}(${ACCT === 'hr1' ? 'Chrome·合塑账号' : 'Edge·派卡账号'})`;
|
||||||
|
const text = `🚨 ${label}被其他人登录了(账号在其他设备/浏览器登录,当前已退出),任务停止。如非本人操作请注意账号安全。扫码可重新登录:\n如今天不需要协助筛选简历,可忽略该二维码`;
|
||||||
|
const qrPath = `/tmp/zhaopin-login-qr-${ACCT}.png`;
|
||||||
|
try {
|
||||||
|
// 前置:关闭可能还挂着的被顶弹窗并刷新,让页面回到登录态
|
||||||
|
const pw = require('playwright-core');
|
||||||
|
const b = await pw.chromium.connectOverCDP(`http://127.0.0.1:${PORT}`);
|
||||||
|
const p = b.contexts()[0]?.pages().find(x => /zhaopin\.com/.test(x.url()));
|
||||||
|
if (p) {
|
||||||
|
await p.evaluate(() => {
|
||||||
|
// 点掉被顶弹窗的"重新登录"按钮(会跳登录页);找不到就关弹窗
|
||||||
|
const btn = document.querySelector('.km-modal.km-modal--message-box .km-button--primary');
|
||||||
|
if (btn) btn.click();
|
||||||
|
else document.querySelector('.km-modal__close, .new-shortcut-resume__close')?.click();
|
||||||
|
}).catch(() => {});
|
||||||
|
await new Promise(r => setTimeout(r, 3000));
|
||||||
|
}
|
||||||
|
} catch (e) { log(`前置弹窗处理失败(忽略): ${String(e).slice(0, 80)}`); }
|
||||||
|
try {
|
||||||
|
execSync(`node ${SCRIPTS}/login-qrcode.js ${PORT} ${qrPath}`,
|
||||||
|
{ cwd: SCRIPTS, timeout: 90000, stdio: ['pipe', 'pipe', 'pipe'] });
|
||||||
|
if (fs.existsSync(qrPath) && fs.statSync(qrPath).size > 1000) {
|
||||||
|
sendGroupImage(text, qrPath);
|
||||||
|
writeState('kicked_out', chatLeft);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log('二维码截图异常,降级为纯文字');
|
||||||
|
} catch (e) { log(`二维码获取失败: ${String(e).slice(0, 100)},降级为纯文字`); }
|
||||||
|
send(GROUP, `🚨 ${label}被其他人登录了(账号在其他设备/浏览器登录,当前已退出),任务停止。如非本人操作请注意账号安全`);
|
||||||
|
writeState('kicked_out', chatLeft);
|
||||||
|
}
|
||||||
|
|
||||||
function writeState(status, chatLeft) {
|
function writeState(status, chatLeft) {
|
||||||
fs.writeFileSync(path.join(STATE_DIR, `state-${ACCT}.json`),
|
fs.writeFileSync(path.join(STATE_DIR, `state-${ACCT}.json`),
|
||||||
JSON.stringify({ date: today(), status, chatLeft: chatLeft ?? null, endedAt: new Date().toISOString() }));
|
JSON.stringify({ date: today(), status, chatLeft: chatLeft ?? null, endedAt: new Date().toISOString() }));
|
||||||
@@ -164,10 +198,9 @@ function statusText(s) {
|
|||||||
|
|
||||||
const { code, out } = await runBatch();
|
const { code, out } = await runBatch();
|
||||||
|
|
||||||
// 被顶号(账号在其他设备登录)→ 群告警,立即结束(2026-08-27)
|
// 被顶号(账号在其他设备登录)→ 群告警+二维码(会话已被踢,重新登录同样需要扫码),立即结束(2026-08-27)
|
||||||
if (/账号被顶/.test(out)) {
|
if (/账号被顶/.test(out)) {
|
||||||
send(GROUP, `🚨 ${ACCT}(${ACCT === 'hr1' ? 'Chrome·合塑账号' : 'Edge·派卡账号'})被其他人登录了(账号在其他设备/浏览器登录,当前已退出),任务停止。如非本人操作请注意账号安全`);
|
await notifyKickedOut(lastChatLeft);
|
||||||
maybeSendReport('kicked_out', lastChatLeft);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// 登录失效 → 群告警(带登录二维码),结束
|
// 登录失效 → 群告警(带登录二维码),结束
|
||||||
|
|||||||
Reference in New Issue
Block a user