登录监听增加二维码过期检测: 页面出现'二维码已过期/失效'即停止监听(过期码扫不了), 状态qr_expired入日报; 补全statusText状态文案
This commit is contained in:
+19
-7
@@ -164,6 +164,10 @@ function maybeSendReport(myStatus, chatLeft) {
|
|||||||
function statusText(s) {
|
function statusText(s) {
|
||||||
if (s === 'kicked_out') return '🚨 被顶号(他处登录)';
|
if (s === 'kicked_out') return '🚨 被顶号(他处登录)';
|
||||||
if (s === 'login_expired') return '🚨 登录失效';
|
if (s === 'login_expired') return '🚨 登录失效';
|
||||||
|
if (s === 'qr_expired') return '🚨 等扫码但二维码过期';
|
||||||
|
if (s === 'waiting_relogin') return '⏳ 等待扫码登录';
|
||||||
|
if (s === 'stopped_by_user') return '⏹️ 手动停止';
|
||||||
|
if (s === 'tunnel_failed') return '⚠️ 隧道失败';
|
||||||
if (s === 'alert') return '⚠️ 异常中止';
|
if (s === 'alert') return '⚠️ 异常中止';
|
||||||
if (s === 'chat_exhausted') return '✅ 聊天耗尽收工';
|
if (s === 'chat_exhausted') return '✅ 聊天耗尽收工';
|
||||||
if (s === 'time_cutoff') return '✅ 18点收工';
|
if (s === 'time_cutoff') return '✅ 18点收工';
|
||||||
@@ -172,27 +176,35 @@ function statusText(s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 登录监听:告警发出后每30秒检查登录页是否已被扫码登录(跳回推荐页/出现卡片)
|
// 登录监听:告警发出后每30秒检查登录页是否已被扫码登录(跳回推荐页/出现卡片)
|
||||||
|
// 同时监测二维码状态:页面出现"二维码已过期/失效"→ 停止监听(过期码扫不了,再等无意义)
|
||||||
// 监听到登录成功 → 自动重启筛选批次;17:30 后不再等(留给18:05收队收尾)
|
// 监听到登录成功 → 自动重启筛选批次;17:30 后不再等(留给18:05收队收尾)
|
||||||
async function waitForRelogin() {
|
async function waitForRelogin() {
|
||||||
const pw = require('playwright-core');
|
const pw = require('playwright-core');
|
||||||
log('进入登录监听(每30秒检测扫码,最多等到北京17:30)...');
|
log('进入登录监听(每30秒检测扫码+二维码有效期,最多等到北京17:30)...');
|
||||||
writeState('waiting_relogin', null);
|
writeState('waiting_relogin', null);
|
||||||
while (!fs.existsSync(STOP_FLAG) && !pastCutoff(17.5 * 60)) {
|
while (!fs.existsSync(STOP_FLAG) && !pastCutoff(17.5 * 60)) {
|
||||||
await new Promise(r => setTimeout(r, 30000));
|
await new Promise(r => setTimeout(r, 30000));
|
||||||
let logged = false;
|
let logged = false, qrExpired = false;
|
||||||
try {
|
try {
|
||||||
const b = await pw.chromium.connectOverCDP(`http://127.0.0.1:${PORT}`);
|
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()));
|
const p = b.contexts()[0]?.pages().find(x => /zhaopin\.com/.test(x.url()));
|
||||||
if (p) {
|
if (p) {
|
||||||
logged = await p.evaluate(() =>
|
const r = await p.evaluate(() => {
|
||||||
!location.href.includes('passport') &&
|
const body = document.body?.innerText || '';
|
||||||
!/账号已在其他设备或浏览器登录/.test(document.body?.innerText || '') &&
|
return {
|
||||||
document.querySelectorAll('.recommend-item').length > 0
|
logged: !location.href.includes('passport') &&
|
||||||
).catch(() => false);
|
!/账号已在其他设备或浏览器登录/.test(body) &&
|
||||||
|
document.querySelectorAll('.recommend-item').length > 0,
|
||||||
|
// 二维码过期/失效提示(智联文案:"二维码已过期" / "已失效,请刷新"等)
|
||||||
|
qrExpired: /二维码[^\n]{0,10}(过期|失效)|已过期.{0,10}刷新/.test(body),
|
||||||
|
};
|
||||||
|
}).catch(() => ({ logged: false, qrExpired: false }));
|
||||||
|
logged = r.logged; qrExpired = r.qrExpired;
|
||||||
}
|
}
|
||||||
try { await b.close(); } catch (_) {}
|
try { await b.close(); } catch (_) {}
|
||||||
} catch (_) { /* CDP暂时不通就下轮再查 */ }
|
} catch (_) { /* CDP暂时不通就下轮再查 */ }
|
||||||
if (logged) { log('🎉 检测到已扫码登录,自动复工'); return true; }
|
if (logged) { log('🎉 检测到已扫码登录,自动复工'); return true; }
|
||||||
|
if (qrExpired) { log('⏹ 登录二维码已过期,停止监听(今日不再等扫码)'); writeState('qr_expired', null); return false; }
|
||||||
}
|
}
|
||||||
log('登录监听结束(到时或被叫停),今日不再复工');
|
log('登录监听结束(到时或被叫停),今日不再复工');
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user