Description
📝 OpenCLI CDP 直连模式修复总结
问题背景:
原本 OpenCLI 虽然声明支持 OPENCLI_CDP_ENDPOINT 环境变量,但在实际使用中存在两个核心问题:
- 逻辑路径未切换:即便设置了环境变量,内核仍会尝试启动 daemon (守护进程) 并使用 BrowserBridge,导致无法直接控制指定的浏览器端口。
- 导航卡死 (Hang):在使用 CDP 直连模式进行页面跳转 (goto) 时,程序常因等待 DOM 稳定信号而永久挂起。
主要修改内容:
- 核心工厂逻辑重构 (src/runtime.ts)
修改了 getBrowserFactory 函数,提升了 OPENCLI_CDP_ENDPOINT 的优先级。
- 改动:现在只要检测到环境变量 OPENCLI_CDP_ENDPOINT,就会强制返回 CDPBridge 实例,彻底绕过 daemon 启动逻辑和 BrowserBridge 检查。
- CDP 桥接器稳定性增强 (src/browser/cdp.ts)
这是修复“卡死”现象的关键:
- 引入超时保护:为 CDPPage.goto 中的 DOM 稳定性检查 (waitForDomStableJs) 引入了 withTimeoutMs 包装。
- 原因:某些指纹浏览器或页面(如 Facebook/Bilibili)会有持续的背景微小变动或加载动画,导致 waitForDomStableJs 永远无法达成“绝对静默”。
- 修复:增加了 2 秒的额外容错时间。如果页面在设定的 settleMs 内未完全稳定,系统会抛出警告而非永久挂起,从而保证后续自动化指令能继续执行。
- 命令发送超时控制:为底层的 send() 方法增加了默认 30s 的保护,防止 WebSocket 指令丢失导致的进程僵死。
- 页面跳转流程优化
- 事件驱动:将原有的硬编码 sleep(1000) 改为监听 CDP 原生的 Page.loadEventFired 事件,使得页面加载更灵敏且更可靠。
修复效果:
- 用户现在可以通过 OPENCLI_CDP_ENDPOINT=http://localhost:9333 完美控制各种指纹浏览器(如 AdsPower, HubStudio, BitBrowser 等)。
- 解决了跨浏览器、多 Profile 自动化时的内核启动冲突问题。
Steps to Reproduce
- Run
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9333 --user-data-dir="/tmp/chrome-debug-9333" --remote-allow-origins="*"
- Run
OPENCLI_CDP_ENDPOINT=http://localhost:9333
- Run
opencli browser open "https://www.google.com" --live --focus
- But not opreate in new chrome.
Expected Behavior
run on new chrome
OpenCLI Version
1.7.8
Node.js Version
20.x
Operating System
macOS
Logs / Screenshots
Description
📝 OpenCLI CDP 直连模式修复总结
问题背景:
原本 OpenCLI 虽然声明支持 OPENCLI_CDP_ENDPOINT 环境变量,但在实际使用中存在两个核心问题:
主要修改内容:
修改了 getBrowserFactory 函数,提升了 OPENCLI_CDP_ENDPOINT 的优先级。
这是修复“卡死”现象的关键:
修复效果:
Steps to Reproduce
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9333 --user-data-dir="/tmp/chrome-debug-9333" --remote-allow-origins="*"OPENCLI_CDP_ENDPOINT=http://localhost:9333opencli browser open "https://www.google.com" --live --focusExpected Behavior
run on new chrome
OpenCLI Version
1.7.8
Node.js Version
20.x
Operating System
macOS
Logs / Screenshots