v1.4 启动时主动登录态检查: 跑批前先查页面, 失效/被顶立即发二维码+进监听(省去第一批空跑), 实测启动18秒内二维码进群
This commit is contained in:
@@ -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:登录类异常(登录失效/被顶号)→ 告警后进监听等扫码,扫完自动复工
|
||||
|
||||
|
||||
Reference in New Issue
Block a user