From 2036c7452ccf7ef046babce86ad3d740244c0352 Mon Sep 17 00:00:00 2001 From: hermes Date: Fri, 28 Aug 2026 02:01:31 +0000 Subject: [PATCH] =?UTF-8?q?v1.4=20=E5=90=AF=E5=8A=A8=E6=97=B6=E4=B8=BB?= =?UTF-8?q?=E5=8A=A8=E7=99=BB=E5=BD=95=E6=80=81=E6=A3=80=E6=9F=A5:=20?= =?UTF-8?q?=E8=B7=91=E6=89=B9=E5=89=8D=E5=85=88=E6=9F=A5=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?,=20=E5=A4=B1=E6=95=88/=E8=A2=AB=E9=A1=B6=E7=AB=8B=E5=8D=B3?= =?UTF-8?q?=E5=8F=91=E4=BA=8C=E7=BB=B4=E7=A0=81+=E8=BF=9B=E7=9B=91?= =?UTF-8?q?=E5=90=AC(=E7=9C=81=E5=8E=BB=E7=AC=AC=E4=B8=80=E6=89=B9?= =?UTF-8?q?=E7=A9=BA=E8=B7=91),=20=E5=AE=9E=E6=B5=8B=E5=90=AF=E5=8A=A818?= =?UTF-8?q?=E7=A7=92=E5=86=85=E4=BA=8C=E7=BB=B4=E7=A0=81=E8=BF=9B=E7=BE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/daily-runner.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/scripts/daily-runner.js b/scripts/daily-runner.js index b9b37b8..ee03a9b 100644 --- a/scripts/daily-runner.js +++ b/scripts/daily-runner.js @@ -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:登录类异常(登录失效/被顶号)→ 告警后进监听等扫码,扫完自动复工