diff --git a/scripts/daily-runner.js b/scripts/daily-runner.js index 6a1e3ed..9a92aef 100644 --- a/scripts/daily-runner.js +++ b/scripts/daily-runner.js @@ -117,6 +117,7 @@ function maybeSendReport(myStatus, chatLeft) { } catch (e) { log(`日报生成/发送失败: ${String(e.message).slice(0, 150)}`); } } function statusText(s) { + if (s === 'kicked_out') return '🚨 被顶号(他处登录)'; if (s === 'login_expired') return '🚨 登录失效'; if (s === 'alert') return '⚠️ 异常中止'; if (s === 'chat_exhausted') return '✅ 聊天耗尽收工'; @@ -152,6 +153,12 @@ function statusText(s) { const { code, out } = await runBatch(); + // 被顶号(账号在其他设备登录)→ 群告警,立即结束(2026-08-27) + if (/账号被顶/.test(out)) { + send(GROUP, `🚨 ${ACCT}(${ACCT === 'hr1' ? 'Chrome·合塑账号' : 'Edge·派卡账号'})被其他人登录了(账号在其他设备/浏览器登录,当前已退出),任务停止。如非本人操作请注意账号安全`); + maybeSendReport('kicked_out', lastChatLeft); + break; + } // 登录失效 → 群告警,结束 if (/登录已失效|passport\.zhaopin\.com/.test(out)) { send(GROUP, `🚨 ${ACCT}(${ACCT === 'hr1' ? 'Chrome·合塑账号' : 'Edge·派卡账号'})智联登录态已失效,今日筛选中止,请在任务机重新登录智联`); diff --git a/scripts/zhaopin-scrape.js b/scripts/zhaopin-scrape.js index 0f9bdce..a60c49e 100755 --- a/scripts/zhaopin-scrape.js +++ b/scripts/zhaopin-scrape.js @@ -296,8 +296,13 @@ async function checkPageHealth(page) { captcha: !!document.querySelector('.verify-wrap,.captcha,.slider-verify,.tcaptcha-iframe') || /安全验证|请完成验证|滑块验证|图形验证码/i.test(body), risk: /操作过于频繁|访问受限|账号异常|请求异常/i.test(body), greetLimit: /打招呼已达上限|已达到.*上限|今日打招呼次数已用完|打招呼额度不足/i.test(body), + // 被顶号检测(2026-08-27):km-modal 消息弹窗 + 精确文案 + 重新登录按钮,三者俱全才判定,防误报 + kicked: !!document.querySelector('.km-modal.km-modal--message-box .km-modal__title-inner') + && /账号已在其他设备或浏览器登录/.test(body) + && !!document.querySelector('.km-modal.km-modal--message-box .km-button--primary'), }; - }).catch(() => ({ captcha: false, risk: false, greetLimit: false })); + }).catch(() => ({ captcha: false, risk: false, greetLimit: false, kicked: false })); + if (info.kicked) return '🚨 ALERT: 账号被顶:您的账号已在其他设备或浏览器登录'; if (info.captcha) return '🚨 ALERT: 触发验证码/风控,已暂停'; if (info.risk) return '🚨 ALERT: 触发风控限制,已暂停'; if (info.greetLimit) return '🚨 ALERT: 打招呼已达上限,停止打招呼';