From 54eb74bd6c0e26bfe217e7f1a28050226e9aa719 Mon Sep 17 00:00:00 2001 From: hermes Date: Mon, 19 Oct 2026 02:07:45 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=8F=91=E9=80=81?= =?UTF-8?q?=E4=B8=89=E9=87=8D=E4=BF=9D=E6=8A=A4(v1.1):=20=E2=91=A0?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=80=81=E9=A2=84=E6=A3=80(=E5=B7=B2?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E2=86=92=E7=BE=A4=E9=87=8C=E5=8F=8D=E9=A6=88?= =?UTF-8?q?'=E6=97=A0=E9=9C=80=E6=89=AB=E7=A0=81'=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E5=8F=91=E7=A0=81)=20=E2=91=A1=E5=BC=BA=E5=88=B6=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E5=9C=A8passport=E7=99=BB=E5=BD=95=E9=A1=B5=E6=89=8D?= =?UTF-8?q?=E6=88=AA=E5=9B=BE=20=E2=91=A2=E5=88=A0=E9=99=A4=E6=95=B4?= =?UTF-8?q?=E9=A1=B5=E6=88=AA=E5=9B=BE=E5=85=9C=E5=BA=95(=E5=8F=AA?= =?UTF-8?q?=E8=AE=A4=E7=9C=9F=E5=AE=9E=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=85=83?= =?UTF-8?q?=E7=B4=A0,=20=E6=89=BE=E4=B8=8D=E5=88=B0=E5=B0=B1=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E4=B8=8D=E5=8F=91=E5=9B=BE)=E2=80=94=E2=80=94?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A9=E4=B8=8A=E5=8F=91=E5=87=BA=E7=AE=80?= =?UTF-8?q?=E5=8E=86=E7=95=8C=E9=9D=A2=E6=88=AA=E5=9B=BE=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/login-qrcode.js | 23 +++++++++++++++++++---- scripts/send-qr.sh | 12 +++++++++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/scripts/login-qrcode.js b/scripts/login-qrcode.js index d8b8158..82546b0 100644 --- a/scripts/login-qrcode.js +++ b/scripts/login-qrcode.js @@ -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); diff --git a/scripts/send-qr.sh b/scripts/send-qr.sh index 5588a0c..3485e6c 100755 --- a/scripts/send-qr.sh +++ b/scripts/send-qr.sh @@ -26,14 +26,20 @@ for ACCT in $ACCTS; do *) echo "未知账号: $ACCT(只支持 hr1/hr2/both)"; exit 1;; esac QR=/tmp/zhaopin-login-qr-$ACCT-request.png - echo "[$ACCT] 抓取二维码(刷新登录页拿新码)..." - if node "$SCRIPTS/login-qrcode.js" $PORT $QR 2>&1 | grep -q SAVED && [ -s "$QR" ]; then + echo "[$ACCT] 检查登录态并抓取二维码..." + QROUT=$(node "$SCRIPTS/login-qrcode.js" $PORT $QR 2>&1) + if echo "$QROUT" | grep -q ALREADY_LOGGED_IN; then + # v1.1(2026-10-15):已登录无需发码——群里明确反馈(不要静默) + printf "✅ %s(%s)当前已是登录状态,无需扫码。如仍无法筛选请 @机器人 说明情况" "$ACCT" "$LABEL" > /tmp/qr-req-$ACCT.txt + $HERMES send -t "feishu:$DEST" -f /tmp/qr-req-$ACCT.txt >/dev/null 2>&1 + echo "[$ACCT] ✅ 已是登录状态,已反馈(未发二维码)" + elif echo "$QROUT" | grep -q SAVED && [ -s "$QR" ] && echo "$QROUT" | grep -q QR_ELEMENT_SHOT; then printf "🚨 当前%s(%s)账号登录二维码(实时抓取):\n扫码可重新登录" "$ACCT" "$LABEL" > /tmp/qr-req-$ACCT.txt echo "MEDIA:$QR" >> /tmp/qr-req-$ACCT.txt $HERMES send -t "feishu:$DEST" -f /tmp/qr-req-$ACCT.txt >/dev/null 2>&1 \ && echo "[$ACCT] ✅ 已发送二维码 → $([ "$DEST" = "$GROUP" ] && echo 群 || echo 私聊)" \ || echo "[$ACCT] ❌ 发送失败" else - echo "[$ACCT] ❌ 二维码抓取失败(CDP不通或页面异常)" + echo "[$ACCT] ❌ 二维码抓取失败(未找到真实二维码元素或CDP不通),未发送任何图片" fi done