一个定时任务驱动着真实的Chrome配置文件,保持DEV社区的登录状态。因为API能读评论,却不能发评论。某次运行回来,仪表盘变成了登录页:日志显示打开的是https://dev.to/dashboard,实际落到的却是https://dev.to/magic_links/new,DOM里找不到任何指向自己账号的链接。
配置文件本身没问题。同一时刻对调试端口做探测,返回的是一个活着的Chrome,通过那个端口抓取的仪表盘正常渲染了账号身份链接。两台浏览器,同一台机器,同一分钟,结果完全相反。
![]()
先排查的三件事,为什么都会漏
第一反应是会话过期。这是条件反射,也是最容易让你白白重新认证、烧掉本想保护的登录状态的那个。第二是Chrome更新清掉了Cookie。同一类问题,如果照着处理,代价一样。第三是调试端口挂了,工具回退到了别的浏览器。这个最接近真相,因为它指出了正确的层面——我到底连的是哪台浏览器——然后在里面选错了原因。
真正错在哪:就一个参数
agent-browser在传入--cdp 时会挂到已运行的Chrome上。不传这个参数,它就自己启动一个浏览器,用自己空的配置文件目录,驱动那个浏览器。下游一切照常工作——导航、等待、求值、返回页面,全都能跑。只是所有这些操作都发生在一个从未登录过任何账号的浏览器里。
所以自动化看到的不是会话过期,而是另一台浏览器的未登录会话,并且以真实登出完全相同的形态报告出来。
两种失败模式长得不一样,这才是陷阱
今天在Chrome 152.0.7977.65上配合当前npx构建实测。传了参数但指向一个没有监听的端口:
npx -y agent-browser open "https://dev.to/dashboard" --cdp 49299
echo $?
✗ All CDP discovery methods failed for 127.0.0.1:49299: /json/version: Failed to connect to CDP at 127.0.0.1:49299 ...; WebSocket: WebSocket connect failed at ws://127.0.0.1:49299/devtools/browser: IO error: Connection refused (os error 61)
退出码1。什么都没启动。这个分支伤不到你,因为它会停下来。
完全不传参数:
npx -y agent-browser open "https://dev.to/dashboard"
echo $?
[agent-browser] launched browser
✓
https://dev.to/magic_links/new
退出码0。按包装脚本会检查的所有标准,这都算成功。
反转就是全部问题所在。死端口会大声宣告自己并停下来。缺失参数——你实际会撞上的情况,因为没人会故意填一个死端口——安静地成功,交回一台不属于你的浏览器。而因为症状表现为"突然登出",本能反应是去找死端口,而那恰恰是会明确告诉你的唯一分支。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.