一场从头到尾的实战排查,带你彻底搞懂agent-browser在 Windows 上的启动问题
agent-browser:------2026最火最屌的浏览器自动化工具
关于openclaw-skills的介绍,这篇讲得不错,推荐:
报错如下
agent-browser是一个优秀的浏览器自动化 CLI 工具,但在 Windows 环境下,经常会碰到这个经典错误:
✗ Chrome exited early (exit code: 0) without writing DevToolsActivePort (also tried parsing stderr) Chrome exited before providing DevTools URL (no stderr output from Chrome) Hint: try passing --args "--no-sandbox" if Chrome crashes silently in your environment本文记录了一次完整的排查过程,从现象到原因,再到多种解决方案,彻底解决这个问题!!
(本人一步步排雷,没有在网站找到完整记录,本篇一次性码全)
一、问题现象
cmd执行命令:
bash
agent-browser open https://baidu.com
-
任务管理器中可以看到多个
chrome.exe进程一闪而过(或停留) -
浏览器窗口可能短暂弹出但立即关闭
-
终端输出上述
DevToolsActivePort错误 -
即使加上
--args --no-sandbox依然失败
二、初步分析与常用手段
2.1 运行 doctor 诊断
bash
agent-browser doctor
如果 doctor 能成功启动 Chrome,说明 Chrome 本身可用,问题出在 open 命令的守护进程模式 上。
2.2 关闭残留守护进程
bash
agent-browser close --all
2.3 强制清理 Chrome 进程
bash
taskkill /f /im chrome.exe
taskkill /f /im chromedriver.exe
2.4 使用 --no-sandbox 参数
bash
agent-browser open https://baidu.com --headed --args --no-sandbox
很多情况下这一步就能解决,但本人试过很多次,依然失败。
三、深度排查:找出真正的"元凶"
3.1 检查端口占用
agent-browser 默认使用 9222 端口与 Chrome DevTools 通信。检查端口是否被占用:
bash
netstat -ano | findstr :9222
如果看到类似输出:
bash
TCP 127.0.0.1:9222 0.0.0.0:0 LISTENING 36404
说明端口被其他进程(PID 36404)占用了,导致 agent-browser 无法绑定。
解决 :结束占用进程
bash
taskkill /f /pid 36404
3.2 路径与权限问题
如果在 C:\Windows\System32 目录下执行命令,Chrome 可能因权限不足无法写入 DevToolsActivePort 临时文件。解决方案:切换到普通用户目录 -- 本人实踩
bash
cd %USERPROFILE%
3.3 验证 Chrome 独立运行能力
手动启动 Chrome 并开启调试端口:
bash
"D:\chrome-win64\chrome.exe" --remote-debugging-port=9222 --user-data-dir="%TEMP%\chrome-test-profile" --no-sandbox --disable-gpu
然后在另一个终端访问 http://localhost:9222/json/version,如果能返回 JSON 信息,说明 Chrome 调试模式正常。
四、终极解决方案:手动连接模式(✅️⭐⭐)
建议在此之间:试一下不要用管理员模式启动,试一下普通启动命令行,执行一下open看看行不行!
当自动启动模式屡屡失败时,可以采用"手动启动 Chrome + agent-browser 连接"的方式,绕过 agent-browser 自身的启动逻辑。
步骤 1:手动启动带调试端口的 Chrome
bash
"D:\chrome-win64\chrome.exe" --remote-debugging-port=9222 --user-data-dir="%TEMP%\chrome-profile" --no-sandbox --disable-gpu
-
保持该终端窗口不关闭
-
会弹出一个空白的 Chrome 窗口
步骤 2:获取 WebSocket URL
在另一个终端中执行(或浏览器访问):
bash
curl http://localhost:9222/json/version
返回的 JSON 中包含 webSocketDebuggerUrl 字段,复制其完整值,例如:
bash
ws://localhost:9222/devtools/browser/8e6b8b9a-xxxx-xxxx-xxxx-xxxxxxxxxxxx
步骤 3:设置环境变量并运行 agent-browser
bash
set AGENT_BROWSER_WS_URL=ws://localhost:9222/devtools/browser/8e6b8b9a-...
agent-browser open https://baidu.com --headed
此时 agent-browser 不会再尝试启动 Chrome,而是直接连接到已有浏览器实例,成功打开目标页面!!!!!!!!!!!!
为什么这个方案有效?
-
绕过了
agent-browser的自动启动逻辑,避开了沙箱、权限、端口冲突等问题 -
手动启动的 Chrome 已经稳定运行,
agent-browser只是"挂载"上去 -
连接方式不依赖
DevToolsActivePort文件,自然不再报错
五、后续使用建议(⭐⭐⭐⭐⭐)
5.1 半自动脚本化(推荐)
创建一个 start-chrome.bat 脚本:
bash
@echo off
start /b D:\chrome-win64\chrome.exe --remote-debugging-port=9222 --user-data-dir=%TEMP%\chrome-profile --no-sandbox --disable-gpu
timeout /t 2
for /f "tokens=2 delims=:" %%a in ('curl -s http://localhost:9222/json/version ^| findstr "webSocketDebuggerUrl"') do set WS_URL=%%a
set WS_URL=%WS_URL:"=%
set WS_URL=%WS_URL:ws=ws%
set AGENT_BROWSER_WS_URL=%WS_URL%
echo Connected to %AGENT_BROWSER_WS_URL%
每次运行该脚本后,Chrome 启动且环境变量自动设置,之后在当前终端直接使用**agent-browser**即可。
六、总结!!!
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Chrome 启动后立即退出,报 DevToolsActivePort 错误 | 沙箱权限不足、端口冲突、残留进程 | 使用 --no-sandbox,关闭残留进程,切换用户目录 |
| doctor 正常但 open 失败 | 守护进程模式与自动启动不兼容 | 使用 agent-browser close --all 后重试 |
| 手动连接成功,自动启动始终失败 | Windows 系统权限限制或安全软件拦截 | 采用手动连接模式并脚本化 |
| 每次手动连接需要重新获取 WebSocket URL | chrome 每次启动生成不同的 session ID | 编写脚本自动提取(见上文) |
核心启示 :当工具自身的自动启动机制失效时,手动启动浏览器 + 工具连接 是一条通用的救命稻草,不仅适用于 agent-browser,也适用于 Puppeteer、Playwright 等类似场景。
常用命令(方便直接复制使用)
bash
taskkill /f /im chrome.exe
taskkill /f /im chromedriver.exe
taskkill /f /im node.exe
agent-browser close --all
set AGENT_BROWSER_CHROME_PATH=D:\chrome-win64\chrome.exe
echo %AGENT_BROWSER_CHROME_PATH%
agent-browser close
agent-browser open https://baidu.com --headed --args --no-sandbox --disable-gpu --remote-allow-origins=*
agent-browser open https://blog.csdn.net/ --headed
C:\Windows\System32>set AGENT_BROWSER_WS_URL=ws://localhost:9222/devtools/browser
C:\Windows\System32>agent-browser open https://baidu.com --headed
✗ Chrome exited early (exit code: 0) without writing DevToolsActivePort
(also tried parsing stderr) Chrome exited before providing DevTools URL (no stderr output from Chrome)
Hint: try passing --args "--no-sandbox" if Chrome crashes silently in your environment