ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

让小龙虾(Openclaw)去问豆包:我是AI还是人类?(2026.3.23+版本浏览器自动化升级:CDP 对接完整指南)

让小龙虾(Openclaw)去问豆包:我是AI还是人类?(2026.3.23+版本浏览器自动化升级:CDP 对接完整指南) 1. 先搞清楚 Openclaw 用 CDP 问豆包到底在做什么Openclaw 通过 CDP 对接 Chrome 实现浏览器自动化本质是让一个外部程序直接跟浏览器内核对话而不是靠插件在中间传话。你给小龙虾发一句“问下豆包我是AI还是人类”它要完成的事情拆开看是四步连上浏览器、打开豆包页面、把问题填进输入框并发送、把豆包的回答读回来。这四步里第一步最容易卡住因为 CDP 的连接方式在 2026.3.23 版本换成了 WebSocket 直连内核端口发现和会话建立的细节跟旧扩展模式完全不同。我先把这条链路讲清楚再给你能直接复制的配置。CDP 全称 Chrome DevTools ProtocolChrome 自己调试页面用的就是它。你打开开发者工具时工具和浏览器之间走的就是这套协议。Openclaw 现在直接复用这套协议等于拿到了浏览器的“原生控制权”。旧模式像你拿对讲机指挥一个坐在浏览器旁边的助手助手再去点按钮新模式是你直接接上了浏览器的控制电路点哪个按钮、读哪块内容都是你自己来。稳定性差别就在这里插件崩了旧模式就断CDP 只要浏览器进程在连接就在。这个场景适合谁如果你只是想让 Agent 自动打开网页截个图旧模式够用。但你要做的是“接管已登录会话去问豆包”这种操作就必须用 CDP因为豆包页面可能需要登录态新开的干净窗口没有你的 Cookie问出来的结果和你在日常浏览器里看到的不是一回事。2026.3.23 版本把 existing-session 接管模式做稳了Mac 上反复弹授权窗的 bug 也修了所以现在跑这条链路时机正好。版本门槛要记牢Chrome 或 Brave 必须 144。低于这个版本CDP 的某些域不开放Openclaw 启动时会直接报协议不匹配。你可以先用google-chrome --version确认Brave 用户用brave-browser --version。我实测下来144 以下的版本连transport: cdp这个状态都出不来会一直停在扩展中继模式。还有一个概念要分清Openclaw 自带的 openclaw profile 和你日常用的 user profile 是两套隔离环境。前者是干净的不带你日常的 Cookie 和缓存适合做爬虫和一次性任务后者是接管模式读的是你日常浏览器的登录态适合操作已登录的网页。问豆包这个场景如果你日常浏览器里已经登录过豆包用 user profile 最省事不用重新扫码。下面第二节先把 TaoToken 的接入前置讲清楚因为 Agent 的模型调用要走它。2. TaoToken 前置给 Openclaw 的 Agent 接上模型能力Openclaw 本身是个自动化框架它决定“点哪里、读什么”但“理解豆包回答了什么、下一步该干嘛”这部分要靠模型。所以你得先给 Openclaw 配一个能用的模型入口。TaoToken 在这里的角色是提供统一的 API 接入你拿到 Key 和 Base URL 之后Openclaw 的 Agent 就能通过它调用模型来完成页面理解和决策。先说清楚要准备什么。你需要三样东西API Key、Base URL、Model ID。这三件套在 Openclaw 的配置里是绑在一起的缺一个都跑不起来。API Key 去控制台生成Base URL 用https://taotoken.net/apiModel ID 根据你选的模型填。这三个值后面在配置文件里会同时出现我先把获取路径给你。打开控制台页面生成 Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopenclaw_cdp_doubao 。生成之后先复制存好页面刷新后 Key 不会再完整显示。如果你还没决定用哪个模型可以先去模型对话页面试一下效果https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopenclaw_cdp_doubao 。在对话页面里选一个模型发几句话确认响应正常再把这个 Model ID 记下来填进 Openclaw。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopenclaw_cdp_doubao 里面有各语言的调用示例和参数说明。如果你后面要长期跑编码类或 Agent 类任务可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopenclaw_cdp_doubao 。API Keys 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopenclaw_cdp_doubao 可以随时回来查已生成的 Key。这里有个容易踩的坑Openclaw 的模型配置和浏览器配置是分开的两块。很多人配好了 CDP 端口结果 Agent 一调用就报模型鉴权失败就是因为只配了 browser 段没配 model 段。我下面给的完整配置里两块都会写全你照着填就行。另外 Base URL 结尾不要多加斜杠https://taotoken.net/api就是完整地址加了斜杠有些客户端会拼出双斜杠导致 404。Key 的权限建议单独建一个不要和你其他项目共用。Openclaw 跑自动化时会频繁发请求如果 Key 被限流排查起来会以为是 CDP 断了其实是模型侧的问题。分开建 Key 之后出问题看日志就能快速定位是哪一侧。准备好这三件套下一节直接上可复制的配置。3. 可复制配置openclaw.json 完整片段与 CDP 端口设置这一节给你能直接粘贴的配置。Openclaw 的主配置文件在~/.openclaw/openclaw.json如果目录不存在先手动建一下。下面这份是完整片段包含 browser 段和 model 段你按自己的 Key 和 Model ID 替换占位符。{ browser: { enabled: true, defaultProfile: openclaw, profiles: { openclaw: { cdpPort: 18800, color: #FF4500 }, user: { driver: existing-session, attachOnly: true, color: #00AA00 } } }, model: { provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: 你的_API_Key, modelId: 你的_Model_ID } }cdpPort是本地 CDP 通信的端口默认区间是 18800-18899。如果你机器上这个端口被占了Openclaw 启动会失败换一个区间内的端口即可。driver: existing-session是接管模式的关键attachOnly: true表示只附着到已存在的浏览器会话不新开窗口。这两个字段必须成对出现只写一个会报配置校验错误。模型段里provider填openai-compatible因为 TaoToken 的接口是兼容 OpenAI 格式的。baseUrl就是https://taotoken.net/apiapiKey填你刚才生成的 KeymodelId填你在对话页面确认过的模型 ID。这三件套缺一不可我前面强调过。如果你用 TOML 格式管理配置有些部署脚本会转成 TOML对应片段是这样[browser] enabled true defaultProfile openclaw [browser.profiles.openclaw] cdpPort 18800 color #FF4500 [browser.profiles.user] driver existing-session attachOnly true color #00AA00 [model] provider openai-compatible baseUrl https://taotoken.net/api apiKey 你的_API_Key modelId 你的_Model_ID配置写完后先做一次语法校验Openclaw 有内置的检查命令openclaw config validate看到config ok再往下走。如果报unknown field多半是你把字段名拼错了对照上面的片段逐个核对。JSON 里不能有注释我上面为了讲解加的说明不要带进去否则解析会失败。端口占用检查用这条lsof -i :18800如果输出里有其他进程换端口或者先停掉那个进程。接管模式不需要指定端口它附着到你日常浏览器的调试端口上那个端口是浏览器启动时自己开的。下一节讲怎么把日常浏览器变成可附着的状态以及怎么验证整条链路通了。4. 分步验证从 WebSocket 握手到让小龙虾问出豆包的回答配置就绪后按顺序验证。第一步先确认浏览器版本和调试开关。Chrome 用户在地址栏打开chrome://inspect/#remote-debuggingBrave 用户打开brave://inspect勾选 “Enable remote debugging”。这一步是接管模式的前提没开的话attachOnly会连不上。第二步启动 Openclaw 的独立浏览器 profile验证 CDP 直连是否工作openclaw browser --browser-profile openclaw start openclaw browser --browser-profile openclaw statusstatus 输出里看到transport: cdp就说明 WebSocket 直连内核成功了。如果显示transport: extension说明配置没生效回去检查cdpPort和enabled字段。第三步验证接管模式。先确认你日常浏览器已经开着然后openclaw browser --browser-profile user tabs这条命令会列出你日常浏览器里所有打开的标签页。能看到列表就说明接管成功。第一次连接时浏览器会弹窗问是否允许调试点允许之后不再问。Mac 用户如果反复弹窗确认 Openclaw 版本在 2026.3.23 之后。第四步做一次 WebSocket 握手的手动验证确认 CDP 端点可达。先拿到调试端点的 WebSocket 地址curl -s http://127.0.0.1:18800/json/version返回的 JSON 里有webSocketDebuggerUrl字段形如ws://127.0.0.1:18800/devtools/browser/xxxx。用 wscat 连一下npx wscat -c ws://127.0.0.1:18800/devtools/browser/xxxx连上后发一条最简单的 CDP 命令{id:1,method:Browser.getVersion}正常会返回浏览器版本信息。这一步通了说明 WebSocket 链路完全没问题剩下的就是 Openclaw 帮你封装好的页面操控。第五步让小龙虾去问豆包。用 Agent 工具调用接管模式打开豆包页面{ name: browser_navigate, arguments: { browser_profile: user, url: https://www.doubao.com } }页面打开后用browser_type把问题填进输入框再用browser_click点发送{ name: browser_type, arguments: { selector: textarea, text: 我是AI还是人类 } }{ name: browser_click, arguments: { selector: button[typesubmit] } }等几秒让豆包生成回答然后用browser_evaluate把回答文本读回来{ name: browser_evaluate, arguments: { script: document.querySelector(.message-content)?.innerText } }选择器要根据豆包页面实际结构调browser_screenshot可以先截图看页面长什么样确认元素位置再写选择器。我实测下来接管模式下因为带着登录态豆包的回答和你在日常浏览器里手动问是一致的。整个链路跑通后你给小龙虾发的那句“问下豆包我是AI还是人类”就会真的被执行回答也会回读给你。5. 常见报错排查401、local proxy failed 与 reading choices跑这条链路最容易遇到的几个报错我按出现频率排一下。401 Unauthorized基本是模型侧的问题不是 CDP 的问题。检查openclaw.json里 model 段的apiKey有没有填对baseUrl是不是https://taotoken.net/api。如果 Key 是对的还报 401去控制台确认这个 Key 有没有被禁用或过期。还有一种情况是 Key 复制时带了空格JSON 里字符串前后的空格不会被自动去掉手动检查一下。local proxy failed通常出现在接管模式。原因是 Openclaw 尝试附着到你日常浏览器时调试端口没开或者被防火墙拦了。先确认chrome://inspect/#remote-debugging里的开关是勾选状态再确认没有其他程序占用调试端口。如果你日常浏览器是用某个启动脚本开的脚本里可能带了--remote-debugging-port00 表示随机端口Openclaw 找不到。改成固定端口比如--remote-debugging-port9222。reading choices这个报错来自模型响应解析。Openclaw 期望模型返回 OpenAI 格式的choices数组如果返回结构不对就会报这个。检查provider是不是openai-compatiblemodelId是不是在对话页面验证过的那个。有些模型 ID 拼错一个字符接口会返回错误结构而不是标准 choices就会触发这个报错。OAuth相关报错出现在接管已登录页面时。如果你日常浏览器里的豆包登录态过期了Openclaw 附着上去后页面会跳登录Agent 读不到回答。解决办法是先在日常浏览器里手动登录一次豆包确认登录态有效再跑自动化。接管模式读的就是你日常浏览器的 CookieCookie 失效它也没办法。端口冲突报错形如address already in use。用lsof -i :18800找到占用进程要么停掉它要么把cdpPort换成 18801 到 18899 之间的其他值。换端口后记得重启 Openclaw 的 browser 服务。配置校验报错unknown field或invalid type。JSON 里不能有注释字段名大小写要完全一致cdpPort不能写成cdp_port。布尔值true不能加引号加了引号会变成字符串导致类型校验失败。如果报错信息里出现attachOnly相关提示检查driver和attachOnly是不是成对出现。只写attachOnly: true不写driver: existing-sessionOpenclaw 不知道你要附着到哪种会话会直接拒绝启动。排查顺序建议从模型侧往浏览器侧走先确认 401 这类鉴权问题再确认 CDP 连接最后确认页面选择器。因为模型侧报错和浏览器侧报错在日志里可能混在一起按这个顺序能快速缩小范围。6. 把这条链路用起来从问豆包到更多自动化场景跑通“让小龙虾问豆包”之后这套 CDP 接管模式能做的事还有很多。核心价值在于接管已登录会话所以任何需要登录态的网页操作都能自动化查收 QQ 邮箱、看微博通知、在已登录的后台系统里导数据。你不需要在每个场景里重新扫码登录Openclaw 附着到你日常浏览器上登录态直接复用。如果你要做的是批量任务比如定时去某个页面抓数据用 openclaw profile 更合适它是干净隔离的不会污染你日常浏览器的缓存。需要登录态的场景用 user profile不需要的用 openclaw profile两个 profile 在配置里已经分好了调用时通过browser_profile参数切换。模型侧的三件套要记牢Base URL 用https://taotoken.net/apiKey 在控制台生成Model ID 在对话页面确认。这三样在 Openclaw 的 model 段里同时出现缺一个 Agent 就跑不起来。如果你后面要接 Claude Code 或做更复杂的 Agent 编排接入文档里有对应的配置示例https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopenclaw_cdp_doubao 。长期跑编码类任务的话Coding Plan 的额度更划算https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentopenclaw_cdp_doubao 。最后提醒一个安全点CDP 权限极高接管模式下 Openclaw 能读你浏览器里所有页面的内容。所以调试端口不要暴露到公网远程对接时用 WSS 加密链接Token 不要写进会公开的日志里。本地跑的话127.0.0.1绑定就够安全了。端口区间 18800-18899 是本地通信用的不要改成0.0.0.0监听所有网卡。这套配置我反复调过几次最稳的组合就是 openclaw profile 做独立任务、user profile 做接管任务、模型走 TaoToken 统一入口。你按上面的步骤走一遍从版本检查到 WebSocket 握手验证再到实际问豆包整条链路应该能在半小时内跑通。卡住的话优先看第 5 节的报错对照大部分问题都在那几类里。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进