二维码发送三重保护(v1.1): ①登录态预检(已登录→群里反馈'无需扫码'不再发码) ②强制确认在passport登录页才截图 ③删除整页截图兜底(只认真实二维码元素, 找不到就报错不发图)——修复早上发出简历界面截图的问题
This commit is contained in:
+19
-4
@@ -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);
|
||||
|
||||
+9
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user