v1.4 启动时主动登录态检查: 跑批前先查页面, 失效/被顶立即发二维码+进监听(省去第一批空跑), 实测启动18秒内二维码进群

This commit is contained in:
hermes
2026-08-28 02:01:31 +00:00
parent bb841271d3
commit 2036c7452c
+34
View File
@@ -270,6 +270,40 @@ async function verifyBlockedPage() {
log('隧道已恢复');
}
// v1.4:启动时主动登录态检查——跑第一批之前先看页面,失效/被顶立即发二维码+进监听
// (否则第一批要空跑1-2分钟在页面上撞见登录页才告警)
let abortDay = false; // 启动阶段没等来扫码 → 今日收工
{
const pw = require('playwright-core');
try {
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) {
const st = await p.evaluate(() => ({
login: location.href.includes('passport'),
kicked: !!document.querySelector('.km-modal.km-modal--message-box') &&
/账号已在其他设备或浏览器登录/.test(document.body?.innerText || ''),
ok: !location.href.includes('passport') &&
document.querySelectorAll('.recommend-item').length > 0,
})).catch(() => null);
if (st?.login || st?.kicked) {
log(`启动登录态检查:${st.kicked ? '被顶号' : '登录失效'},直接走告警+扫码监听`);
if (st.kicked) await notifyKickedOut(null);
else { notifyLoginExpired(); writeState('login_expired', null); }
const relogged = await waitForRelogin();
if (relogged) { writeState('running', null); log('扫码登录成功,正式开始筛选'); }
else { log('启动阶段未等来扫码,今日收工'); abortDay = true; }
} else if (st?.ok) {
log('启动登录态检查:✅ 正常');
} else {
log('启动登录态检查:页面状态未知(可能加载中),继续按正常流程跑');
}
}
try { await b.close(); } catch (_) {}
} catch (e) { log(`启动登录态检查异常(忽略,按正常流程跑): ${String(e).slice(0, 80)}`); }
}
if (abortDay) { log('runner 结束'); process.exit(0); }
let lastChatLeft = null, zeroStreak = 0;
let needRelogin = false; // v1.2:登录类异常(登录失效/被顶号)→ 告警后进监听等扫码,扫完自动复工