二维码发送三重保护(v1.1): ①登录态预检(已登录→群里反馈'无需扫码'不再发码) ②强制确认在passport登录页才截图 ③删除整页截图兜底(只认真实二维码元素, 找不到就报错不发图)——修复早上发出简历界面截图的问题

This commit is contained in:
hermes
2026-10-19 02:07:45 +00:00
parent 2ca0be3841
commit 54eb74bd6c
2 changed files with 28 additions and 7 deletions
+19 -4
View File
@@ -19,9 +19,18 @@ const OUT = process.argv[3] || `/tmp/zhaopin-login-qr-${PORT}.png`;
(async () => {
const b = await chromium.connectOverCDP(`http://127.0.0.1:${PORT}`);
let p = b.contexts()[0]?.pages().find(x => /passport\.zhaopin\.com/.test(x.url()));
// v1.1(2026-10-15):登录态预检——不在登录页且推荐页有卡片 = 已登录,无需发码
if (!p) {
const rec = b.contexts()[0]?.pages().find(x => /rd\d?\.zhaopin\.com/.test(x.url()));
if (rec) {
const logged = await rec.evaluate(() =>
!location.href.includes('passport') && document.querySelectorAll('.recommend-item').length > 0
).catch(() => false);
if (logged) { console.log('ALREADY_LOGGED_IN'); process.exit(0); } // 特殊退出码0+标记:已登录
}
// 找推荐页tab刷新,触发跳转到登录页
p = b.contexts()[0]?.pages().find(x => /rd\d?\.zhaopin\.com/.test(x.url())) || b.contexts()[0]?.pages()[0];
p = rec || b.contexts()[0]?.pages()[0];
if (!p) { console.error('NO_PAGE'); process.exit(1); }
await p.reload({ waitUntil: 'domcontentloaded', timeout: 60000 }).catch(() => {});
await new Promise(r => setTimeout(r, 4000));
@@ -37,6 +46,11 @@ const OUT = process.argv[3] || `/tmp/zhaopin-login-qr-${PORT}.png`;
}
console.log('PAGE:', p.url().slice(0, 90));
// v1.1:确认真的在登录页(防止误把推荐页/其他页面截图当二维码发出去)
if (!/passport\.zhaopin\.com/.test(p.url())) {
console.error('NOT_LOGIN_PAGE'); process.exit(1);
}
// 等二维码出现(canvas 或 img.qr / 二维码容器,多选择器兜底)
const qrSel = [
'canvas', // 智联登录二维码多为 canvas 绘制
@@ -63,9 +77,10 @@ const OUT = process.argv[3] || `/tmp/zhaopin-login-qr-${PORT}.png`;
await el.screenshot({ path: OUT }).catch(async () => { await p.screenshot({ path: OUT }); });
console.log('QR_ELEMENT_SHOT');
} else {
// 兜底:整页截图(登录页通常是全屏二维码布局)
await p.screenshot({ path: OUT });
console.log('FULLPAGE_SHOT');
// v1.1(2026-10-15):删掉整页截图兜底——找不到二维码元素就报错,
// 不许把非二维码图片(登录页全屏/推荐页截图)当二维码发出去(用户10-15反馈)
console.error('NO_QR_ELEMENT');
process.exit(1);
}
console.log('SAVED:', OUT);
process.exit(0);