Boss 反爬升级:所有命令报"登录状态校验失败",根因是 Boss 主包 JS 主动重载页面
环境
- boss-cli: 0.4.0(最新版,已确认)
- Node.js: v24.15.0
- OS: Windows 11
- 浏览器: Microsoft Edge 149.0.4022.52(机器上未安装 Chrome,CLI 自动 fallback 到 Edge)
- Boss 直聘主包:
zhipin-boss/index/v10194/static/js/846.js(异常触发的脚本)
现象
任何业务命令(boss list、boss list --unread)都立即报:
但实际登录态完全有效:
- 浏览器停在
https://www.zhipin.com/web/chat/index
- 左侧菜单(职位管理 / 推荐牛人 / 沟通 12 / 等)可见
- 候选人列表可正常显示
- 手动 F5 刷新仍在已登录页
根因诊断(已通过 CDP 抓包定位)
错误来自 dist/common/boss_session_page.js:98 的菜单签名稳定性检查。但根因不在签名变化,而在于:
Boss 主包 846.js 检测到 CDP 自动化连接后,主动调用 Page.navigate 重新加载页面,导致 readMenuListSnapshot 在重载窗口里读到 .menu-list 不存在。
抓到的关键证据(DEBUG=* boss list 的 stderr):
{
"method": "Network.requestWillBeSent",
"params": {
"request": {
"url": "https://www.zhipin.com/web/chat/index",
"method": "GET"
},
"initiator": {
"type": "script",
"stack": {
"callFrames": [{
"scriptId": "52",
"url": "https://static.zhipin.com/zhipin-boss/index/v10194/static/js/846.js",
"lineNumber": 0,
"columnNumber": 64969
}]
}
},
"hasUserGesture": true,
"type": "Document",
"frameId": "..."
}
}
随后 readMenuListSnapshot 返回 {"exists":false,"signature":""},触发 CLI 报错。
已排除的可能原因
- ✅ 端口 53470 上 Edge 实例正常,
/json/version 能返回
- ✅ CLI 选对了 zhipin.com 页面(不是 tab-search 那个 browser_ui)
- ✅ 直连 CDP 用同样的选择器读
.menu-list,可以稳定读到 12 项菜单,签名 3+ 秒不变
- ✅
BOSS_CLI_NO_AGENT_OVERLAY=1 关闭 overlay 注入也无效
- ✅ 降级到 0.3.5 / 0.3.4 同样报错(说明反爬是服务端动态升级,不是 CLI 回归)
复现步骤
- 安装
@joohw/boss-cli@0.4.0
boss login 完成 Boss 直聘 B 端登录
- 浏览器停在
/web/chat/index,登录态正常
- 跑
boss list → 立即报错
建议方向
846.js 里有一段反 CDP 自动化检测,命中后调用 location.assign(currentUrl) 或类似 API 强制刷页。考虑:
- 加强
boss_page_guards.js 的 navigation 守卫,拦截目标 URL == 当前 URL 的 Document 类型导航(这种"自重载"几乎肯定是反爬触发的)
- 或者在
evaluateOnNewDocument 里直接 hook location.reload / location.assign(同 URL) / window.location.href = 同 URL
临时缓解
暂时没有可用绕过手段。等 CLI 修复,或手动操作 Boss 直聘。
Boss 反爬升级:所有命令报"登录状态校验失败",根因是 Boss 主包 JS 主动重载页面
环境
zhipin-boss/index/v10194/static/js/846.js(异常触发的脚本)现象
任何业务命令(
boss list、boss list --unread)都立即报:但实际登录态完全有效:
https://www.zhipin.com/web/chat/index根因诊断(已通过 CDP 抓包定位)
错误来自
dist/common/boss_session_page.js:98的菜单签名稳定性检查。但根因不在签名变化,而在于:Boss 主包
846.js检测到 CDP 自动化连接后,主动调用Page.navigate重新加载页面,导致readMenuListSnapshot在重载窗口里读到.menu-list不存在。抓到的关键证据(
DEBUG=* boss list的 stderr):{ "method": "Network.requestWillBeSent", "params": { "request": { "url": "https://www.zhipin.com/web/chat/index", "method": "GET" }, "initiator": { "type": "script", "stack": { "callFrames": [{ "scriptId": "52", "url": "https://static.zhipin.com/zhipin-boss/index/v10194/static/js/846.js", "lineNumber": 0, "columnNumber": 64969 }] } }, "hasUserGesture": true, "type": "Document", "frameId": "..." } }随后
readMenuListSnapshot返回{"exists":false,"signature":""},触发 CLI 报错。已排除的可能原因
/json/version能返回.menu-list,可以稳定读到 12 项菜单,签名 3+ 秒不变BOSS_CLI_NO_AGENT_OVERLAY=1关闭 overlay 注入也无效复现步骤
@joohw/boss-cli@0.4.0boss login完成 Boss 直聘 B 端登录/web/chat/index,登录态正常boss list→ 立即报错建议方向
846.js里有一段反 CDP 自动化检测,命中后调用location.assign(currentUrl)或类似 API 强制刷页。考虑:boss_page_guards.js的 navigation 守卫,拦截目标 URL == 当前 URL 的 Document 类型导航(这种"自重载"几乎肯定是反爬触发的)evaluateOnNewDocument里直接 hooklocation.reload/location.assign(同 URL)/window.location.href = 同 URL临时缓解
暂时没有可用绕过手段。等 CLI 修复,或手动操作 Boss 直聘。