Windows Chrome 连接 Ubuntu OpenClaw

1. 目标
让 Ubuntu 上的 OpenClaw 调用 局域网内 Windows 机器上的 Chrome 浏览器。
最终采用的是:

•Windows 上运行 Chrome
•Chrome 本地开启 CDP 调试端口
•Windows 用 portproxy 暴露一个局域网可访问端口
•Ubuntu 上的 OpenClaw 通过browser.profiles.remote.cdpUrl连接这个端口

2. 最终可用架构
Plain Text
Ubuntu OpenClaw

 -> http://windows 局域网IP:13333
  -> Windows portproxy
  -> 127.0.0.1:9222
  -> Chrome DevTools Protocol
  -> Windows Chrome

说明:

•9222:Chrome 本机 CDP 调试端口
•13333:Windows 对局域网开放的转发端口

3. 关键结论
3.1 不能直接用 existing-session/user 跨机器
如果是:

•Ubuntu 跑 OpenClaw
•Windows 跑 Chrome

那么应该使用 remote CDP,而不是 profile=“user” / existing-session。
existing-session 更适合同一台机器上 OpenClaw 直接附着本机浏览器。

3.2 Chrome 本机先测通,再谈 OpenClaw
前提:新建一个chrome profile目录,例如:C:\chrome-openclaw-profile
这方案的好处

第一次你手动登录网站
登录态 / cookie 会保存在 C:\chrome-openclaw-profile
以后 OpenClaw 连的还是这个 profile
既有 cookie,又不污染你日常主浏览器

说白了,就是给 OpenClaw 单独养一只“有记忆的浏览器”。

第一步不是配 OpenClaw,而是先验证 Windows 上的 Chrome 调试端口本身工作正常。
启动 Chrome 测试实例:

PowerShell
Start-Process -FilePath "C:\Program Files\Google\Chrome\Application\chrome.exe" -ArgumentList "--remote-debugging-port=9222","--remote-debugging-address=0.0.0.0","--user-data-dir=C:\chrome-openclaw-profile","about:blank"

验证本机接口:

PowerShell
curl.exe http://127.0.0.1:9222/json/version
curl.exe http://127.0.0.1:9222/json/list

正常时:

•/json/version 返回 JSON,包含 webSocketDebuggerUrl
•/json/list 返回标签页列表

4. 踩到的坑

4.1 端口 9222 被 Windows 的 portproxy 抢占

当时 netstat -ano | findstr :9222 显示监听 PID 对应的是:

•svchost.exe
•服务名:iphlpsvc

PowerShell
netsh interface portproxy show all

看到:

Plain Text
0.0.0.0    9222    127.0.0.1    9222

这会导致:

•Chrome 虽然带了 --remote-debugging-port=9222
•但真正监听 9222 的不是 Chrome,而是 Windows 端口代理层
•所以访问 /json/version 得到异常结果或空回复

4.2 为什么之前会返回奇怪结果
因为访问到的不是 Chrome 的 CDP 服务,而是被 portproxy 接管后的端口。
这是一个很阴的坑:

•端口看起来开了
•但不是你以为的那个程序在监听

5. 正确做法:让 Chrome 用 9222,本地监听;让 Windows 暴露 13333
最终采用:

•Chrome:监听 127.0.0.1:9222
•Windows portproxy:监听 0.0.0.0:13333,转发到 127.0.0.1:9222

5.1 启动 Chrome

PowerShell
taskkill /F /IM chrome.exe
Start-Process -FilePath "C:\Program Files\Google\Chrome\Application\chrome.exe" -ArgumentList "--remote-debugging-port=9222","--remote-debugging-address=0.0.0.0","--user-data-dir=C:\chrome-openclaw-profile","about:blank"

说明:

•--remote-debugging-port=9222:开启 CDP 调试端口
•--user-data-dir=...:使用专用的
•about:blank:提供初始页,便于测试 /json/list

5.2 添加 Windows 端口转发
管理员 PowerShell:

PowerShell
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=13333 connectaddress=127.0.0.1 connectport=9222

查看:

PowerShell
netsh interface portproxy show all

应看到:

Plain Text
0.0.0.0    13333    127.0.0.1    9222

5.3 放行 Windows 防火墙

PowerShell
New-NetFirewallRule -DisplayName "Chrome CDP 13333" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 13333 -Profile Private

后来发现还不够,因为实际网络配置文件不一定命中 Private。

最终修正为:

PowerShell
Set-NetFirewallRule -DisplayName "Chrome CDP 13333" -Profile Any

这一步之后,Ubuntu 才能真正访问到 Windows 的 13333。

6. 验证步骤

6.1 Windows 本机验证

PowerShell
curl http://windows 局域网IP:13333/json/version
curl http://windows 局域网IP:13333/json/list

返回正常 JSON,说明

•13333 -> 9222 转发成功
•防火墙已允许本机访问这个入口

6.2 Ubuntu 验证

Bash
curl http://windows 局域网IP:13333/json/version
curl http://windows 局域网IP:13333/json/list

最初失败,原因是 Windows 防火墙规则只对 Private 生效。修改为 Any 后恢复正常。

7. OpenClaw 最终配置

Ubuntu 的 ~/.openclaw/openclaw.json 中,Browser 配置最终改为:

JSON
"browser": {
  "enabled": true,
  "attachOnly": true,
  "defaultProfile": "remote",
  "profiles": {
    "remote": {
      "cdpUrl": "http://windows 局域网IP:13333",
      "attachOnly": true,
      "color": "#00AA00"
    },
    "openclaw": {
      "cdpPort": 18800,
      "color": "#FF4500"
    }
  }
}

8. 重启与验证 OpenClaw
重启:

Bash
openclaw gateway restart

验证:

Bash
openclaw browser --browser-profile remote status
openclaw browser --browser-profile remote tabs
openclaw browser --browser-profile remote snapshot

结果:

•status 成功,说明 OpenClaw 已连上远程 Chrome
•tabs 成功,能看到 about:blank
•snapshot 空白是正常的,因为页面本身就是空白页

9. 常见坑总结
坑 1:9222 被旧的 portproxy 占用
排查方法:

PowerShell
netstat -ano | findstr :9222
tasklist /FI "PID eq <PID>"
tasklist /svc /FI "PID eq <PID>"
netsh interface portproxy show all

坑 2:以为端口开了就是 Chrome 在监听

不一定。要看对应 PID 是不是 chrome.exe。

坑 3:防火墙规则只放了 Private
如果当前网络配置不是 Private,Ubuntu 还是访问不了。
坑 4:about:blank 上做 snapshot 结果是空的

这是正常现象,不是失败。

10. 现在怎么用
打开网页:

Bash
openclaw browser --browser-profile remote open https://www.baidu.com

查看标签页:

Bash
openclaw browser --browser-profile remote tabs

获取交互快照:

Bash
openclaw browser --browser-profile remote snapshot --interactive

截图:

Bash
openclaw browser --browser-profile remote screenshot

11. 最终结论
今天这套链路已经打通:

•Ubuntu 上的 OpenClaw
•成功连接局域网内 Windows 的 Chrome
•可以读取标签页、打开网页、做 snapshot、后续可做 click/type/screenshot

一句话概括:

这次不是 OpenClaw 坏,也不是 Chrome 坏,核心是 Windows 历史 portproxy + 防火墙配置文件命中问题。

12. 后续建议

1.Windows 上保留当前 13333 -> 9222 的转发结构,不要再直接把 9222 裸暴露出去。
2.真正使用前,先保持这个测试 Chrome 实例开着。
3.后续可以再练一遍完整实战:
○open
○snapshot --interactive
○click / type
○screenshot
4.如果以后换了 Windows IP,需要同步修改 OpenClaw 中的 cdpUrl。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐