Claude in Chrome 扩展在 WSL2 下无法工作,根源在于扩展通过 Windows 注册表发现原生消息宿主,而 Claude Code 在 WSL 中把清单写入 Linux 文件系统,两边互不可见。官方文档也已标明 WSL 不受支持。规避方案是退回 Chrome DevTools 协议(CDP),配合两个廉价的驱动组合,实现低成本、持续登录的浏览器自动化。
核心思路:一台 Windows Chrome 监听 9222 端口,WSL2 中的 agent-browser 负责日常驱动(通过可访问性快照,仅耗数百 tokens,远低于截图的上千 tokens),chrome-devtools-mcp 负责深入调试(网络请求、控制台、Lighthouse)。两者共享同一浏览器,通过 CDP 同时连接,仅需确保各自使用不同标签页。
启动 Chrome 命令(从 WSL 通过 /mnt/c 执行):
```
"/mnt/c/Program Files/Google/Chrome/Application/chrome.exe" \
--remote-debugging-port=9222 \
--user-data-dir="C:\Users\youruser\AppData\Local\ChromeDebugProfiles\myapp" \
--no-first-run --no-default-browser-check \
--remote-allow-origins='*' &
```
--user-data-dir 隔离浏览器配置,登录一次后会话持久保留。
agent-browser 安装:npm install -g agent-browser,注意跳过agent-browser install(它会下载无登录状态的 Chrome for Testing)。首次运行因 $XDG_RUNTIME_DIR 不存在会报权限错误,需设置:
```
export XDG_RUNTIME_DIR=/tmp/abr-runtime
mkdir -p "$XDG_RUNTIME_DIR" && chmod 700 "$XDG_RUNTIME_DIR"
```
将 export 写入 ~/.bashrc 以便跨会话生效。
连接已有 Chrome:agent-browser connect 9222。之后使用 snapshot、fill、click 等命令操作页面,注意 ref 会随 DOM 变化失效,需重新快照。SPA 导航用 pushstate 而非 open。
chrome-devtools-mcp 配置(以 Claude Code 为例,添加至 ~/.claude.json):
```json
{
"mcpServers": {
"chrome-devtools": {
"type": "stdio",
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest", "-u", ""]
}
}
}
```
推荐用claude mcp add --scope user chrome-devtools -- npx -y chrome-devtools-mcp@latest -u http://127.0.0.1:9222添加,避免手动编辑被覆盖。
常见陷阱:
- 端口幽灵:旧的netsh interface portproxy规则会占用 9222 且不被重启清除。在管理员 PowerShell 中用netsh interface portproxy delete v4tov4 listenport=9222 listenaddress=0.0.0.0等命令删除。
- 空工具列表:检查 ~/.claude.json 中端口是否与实验中的 Chrome 一致。
- MCP 服务器在 Chrome 之前启动:先启动 Chrome,再连接 MCP。
这套方案经过数月日常使用验证,关键是将登录状态持久化并避免高昂的截图 token 消耗。记住保持调试配置隔离,且只绑定到 127.0.0.1。故障时先用健康检查命令定位问题。
#开发者 #工具 #WSL2 #Claude #Chrome #CDP #agentbrowser #MCP #调试
@DevToolboxHub