搞定 OpenClaw 2026.3.13 谷歌浏览器对接:DevToolsActivePort / Profile not found 一次解决

1. 先搞清楚这两个报错到底在吵什么

OpenClaw 2026.3.13 对接谷歌浏览器时,DevToolsActivePort和Profile not found是出现频率最高的两类拦路虎。前者通常发生在浏览器启动阶段,OpenClaw 想通过 CDP(Chrome DevTools Protocol)接管一个已经跑起来的 Chromium 实例,结果发现目标端口对应的DevToolsActivePort文件不存在或内容对不上;后者则多发生在配置加载阶段,OpenClaw 按配置里的 profile 名去找浏览器会话,翻遍目录也没找到匹配项,直接抛Profile "xxx" not found。

这两个报错看着吓人,其实根因都落在同一件事上:浏览器侧的调试会话和 OpenClaw 侧的配置没有对齐。OpenClaw 本身不启动浏览器,它只是通过cdpUrl去连接一个已经开启了远程调试端口的 Chromium 实例。只要这个连接链路里任何一环断了——端口没开、profile 名写错、旧会话被复用、配置文件格式有误——就会以这两种报错的形式暴露出来。

这篇内容适合正在用 OpenClaw 2026.x 做浏览器自动化、网页抓取或者 Agent 操作浏览器的同学。我会从配置骨架入手,把config.toml、settings.json和 CC Switch 的配置片段都给出来,然后一步步验证,让你一次跑通。过程中涉及模型调用和 API 接入的部分,我会用 TaoToken 的接口来做演示,因为它的接入方式比较标准,方便你直接复制。

2. 前置准备:TaoToken 接入与浏览器环境确认

在动 OpenClaw 的浏览器配置之前,先把模型侧的接入搞定,否则后面验证 browser 工具时容易把模型报错和浏览器报错混在一起。TaoToken 的 API 地址是https://taotoken.net/api,你需要在控制台创建一个 API Key,然后把它写进 OpenClaw 的模型配置里。

2.1 获取 API Key 并确认模型可用

打开 TaoToken 控制台的 API Keys 页面,新建一个 Key,复制出来。然后可以用一条 curl 命令确认 Key 和模型都正常:

curl https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的Key" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 16 }'

返回里带choices字段就说明模型侧通了。这一步别跳过,因为 OpenClaw 的 browser 工具在 attach 成功后会调用模型做页面理解,模型不通会让你误以为浏览器没连上。

2.2 浏览器版本与调试入口

Chrome 需要 ≥ 144,Edge 需要 ≥ 123,两者都是 Chromium 内核,配置逻辑通用。远程调试入口分别是chrome://inspect/#remote-debugging和edge://inspect/#remote-debugging,默认调试端口都是 9222。OpenClaw 的配置文件在 macOS/Linux 下是~/.openclaw/openclaw.json,Windows 下在用户目录的.openclaw文件夹里。

这里有个容易忽略的点:OpenClaw 2026.3.13 同时支持openclaw.json和config.toml两种配置格式,但浏览器相关的 profile 定义建议统一放在openclaw.json的browser段里,config.toml只放模型和 gateway 的基础设置。混着写容易出现 profile 找不到的情况。

3. 可复制配置:config.toml、settings.json 与 CC Switch 骨架

这一节是核心,我把三份配置都拆开讲,你按自己的环境替换路径和端口即可。

3.1 config.toml:模型与 gateway 基础段

config.toml负责模型接入和 gateway 行为,浏览器部分不在这里定义。下面这份可以直接复制,把api_key换成你自己的:

[model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的Key" default_model = "claude-sonnet-4-20250514" timeout_sec = 120 [gateway] host = "127.0.0.1" port = 8787 log_level = "info" [tools] allow = ["exec", "process", "read", "write", "edit", "apply_patch", "browser"] deny = ["canvas"] [tools.exec] host = "gateway" security = "full" ask = "off" background_ms = 10000 timeout_sec = 1800 cleanup_ms = 1800000

注意tools.allow里必须包含browser,否则 OpenClaw 根本不会去加载浏览器驱动,后面所有 CDP 配置都不会生效。

3.2 settings.json:浏览器 profile 定义

settings.json里放browser段,这是解决Profile not found的关键。profile 名要和后面验证命令里用的名字完全一致:

{ "browser": { "enabled": true, "defaultProfile": "user", "profiles": { "user": { "driver": "existing-session", "cdpUrl": "http://127.0.0.1:9222", "attachOnly": true, "color": "#00AA00", "skipChromeSessionScan": true, "forceCdpForExistingSession": true } }, "remoteCdpTimeoutMs": 10000, "remoteCdpHandshakeTimeoutMs": 15000 } }

几个参数的作用对照如下:

参数作用什么时候必须加
cdpUrl指向浏览器调试端口始终必填
attachOnly只附加不新建会话复用已有浏览器时
skipChromeSessionScan跳过 Chrome 会话扫描对接 Edge 时必加
forceCdpForExistingSession强制 existing-session 走 CDP出现 DevToolsActivePort 报错时加

3.3 CC Switch 配置骨架

如果你用 CC Switch 做多环境切换,浏览器 profile 的骨架可以这样写,把user换成你的 profile 名:

{ "switch": { "active": "user", "profiles": { "user": { "browser": { "cdpUrl": "http://127.0.0.1:9222", "attachOnly": true, "skipChromeSessionScan": true, "forceCdpForExistingSession": true }, "model": { "base_url": "https://taotoken.net/api", "default_model": "claude-sonnet-4-20250514" } } } } }

CC Switch 的 profile 名和settings.json里的 profile 名必须一致,否则切换后 OpenClaw 会按旧名字去找,直接报Profile not found。

4. 逐步验证:从端口到 cdpReady

配置写完不代表通了,按下面顺序验证,每一步都有明确的成功标志。

4.1 启动带调试参数的浏览器

先彻底关掉所有 Chrome/Edge 窗口,然后用终端命令启动,避免复用没有调试参数的旧会话:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --remote-debugging-port=9222 \ --remote-debugging-address=127.0.0.1 \ --user-data-dir=/tmp/chrome-debug &

--user-data-dir指向一个临时目录,这样不会和你日常用的浏览器会话冲突,也能避免DevToolsActivePort文件被旧会话占用。

4.2 验证调试端口

curl http://127.0.0.1:9222/json/version

正常返回类似:

{ "Browser": "Chrome/144.0.0.0", "Protocol-Version": "1.3", "webSocketDebuggerUrl": "ws://127.0.0.1:9222/devtools/browser/xxxxxx" }

如果返回空或者连接被拒,说明端口没起来,回到 4.1 检查启动命令。

4.3 修复配置并重启 OpenClaw

openclaw doctor --fix openclaw stop && openclaw start

doctor --fix会检查配置格式、profile 名一致性和端口可达性,能自动修掉一部分Profile not found的问题。

4.4 验证连接状态

openclaw browser --browser-profile user status

成功输出应该包含:

◇ browser:user status - cdpReady: true - cdpUrl: http://127.0.0.1:9222 - attachOnly: true - driver: existing-session (forced CDP)

看到cdpReady: true就说明浏览器对接通了。如果这里还是 false,进入下一节的排查。

5. 本篇常见错排查

5.1 DevToolsActivePort 报错

这个报错的意思是 OpenClaw 在目标目录里找不到DevToolsActivePort文件,或者文件里的端口和cdpUrl对不上。最常见的原因是浏览器复用了没有调试参数的旧会话。解决办法是彻底退出浏览器进程,用 4.1 的命令重新启动,并且确保--user-data-dir指向一个干净的目录。如果你之前用 GUI 方式开过调试,也建议关掉 GUI 调试开关,统一用终端命令启动,避免两套会话打架。

5.2 Profile not found

Profile "user" not found基本是配置层面的问题。先检查settings.json里profiles下的键名和defaultProfile是否一致,再检查 CC Switch 里的 profile 名是否和它们一致。三处名字必须完全相同,大小写敏感。改完执行openclaw doctor --fix再重启。如果还报,把openclaw.json里的browser段单独抽出来用 JSON 校验工具跑一遍,格式错误也会导致 profile 加载失败。

5.3 cdpReady 为 false

端口通了但cdpReady还是 false,通常是attachOnly和driver的组合没对上。确认driver是existing-session,并且加了forceCdpForExistingSession: true。另外检查remoteCdpTimeoutMs是否太短,网络慢的时候 10000 可能不够,可以临时调到 20000 试。如果用的是 Edge,skipChromeSessionScan必须为 true,否则 OpenClaw 会优先去扫 Chrome 会话,扫不到就卡住。

5.4 模型调用报错混入

有时候 browser 工具已经 attach 成功,但页面理解阶段报模型错误,看起来像是浏览器没连上。这时候单独跑 2.1 的 curl 确认模型侧正常。如果模型侧用的是 TaoToken,检查base_url是否写成了https://taotoken.net/api,不要多加/v1后缀,OpenClaw 的 openai-compatible provider 会自己拼路径。

6. 跑通之后:把浏览器对接接进日常编码流

浏览器对接跑通后,OpenClaw 就能在 Agent 流程里操作页面、抓取内容、做自动化验证。如果你打算长期用这套组合做编码和 Agent 任务,建议把模型接入切到 Coding Plan,这样在频繁调用 browser 工具做页面理解时额度和稳定性都更省心。API Key 的管理在控制台的 API Keys 页面,接入细节可以对照接入文档,模型能力验证可以直接在模型对话里试。

我自己的习惯是:浏览器调试端口固定用 9222,user-data-dir固定指向/tmp/chrome-debug,每次重启机器后先跑一遍 4.2 的 curl,确认端口通了再启动 OpenClaw。这样DevToolsActivePort和Profile not found基本不会再出现。如果哪天换了端口,记得浏览器启动参数和cdpUrl同步改,两处不一致是这两个报错最常见的复发原因。