让 AI 自己写浏览器操作函数:browser-harness 怎么把 CDP 裸接口变成一个会学习的 harness
大部分 AI 编程 Agent 处理网页任务的方式,是提前写好一堆 click()、type()、scroll() 封装函数——模型只能在这些预设动作里选。这套方案稳定,但有一个天花板:遇到没定义过的情况,Agent 就卡住了。
browser-harness(browser-use/browser-harness,17,893 颗星,MIT 许可证)想解决的就是这个问题——把 Chrome DevTools Protocol(CDP)的裸接口直接交给 Agent,让它自己决定需要什么工具,缺了就自己写。
它怎么工作的
核心思路很反直觉:不封装,裸给。
传统 Playwright 方案会提前写好一套 DOM 操作函数,优点是稳定可控,缺点是 AI 被框在有限的工具集里,遇到边界情况就只能报错或放弃。
browser-harness 的做法是:只提供 4 个核心文件(run.py、SKILL.md、agent_helpers.py 的保护壳、src/browser_harness/ 的核心逻辑),然后把 CDP websocket 直接交给 Agent。Agent 在运行时发现缺少某个 helper 函数,就自己写,写完存到 agent-workspace/agent_helpers.py,下次直接用。
也就是说,这个 harness 越跑越”聪明”——跑了 10 个任务之后,它积累的 helper 够应付大多数常规场景。
Browser Use 团队在他们的博客里复盘了这个思路的转变(“The Bitter Lesson of Agent Harnesses”):最初他们花大量时间写 DOM 索引器、click 封装函数,试图让 Agent 不用接触”CDP 的复杂性”。后来发现这些”复杂性”其实是 Agent 见过最多次的东西——RL 训练语料里有大量 Chrome 崩溃、页面重载、iframe 跨域的真实案例。让 Agent 直接读错误信息、自己决定怎么恢复,比预设所有可能的 watchdog 规则更灵活。
真实使用门槛
环境要求明确:
- Python 3.12(
uv tool install强制指定,防止老版本兼容问题) - Chrome 浏览器,需要开启 Remote Debugging(
chrome://inspect/#remote-debugging) - macOS 用户还需要给 Terminal 加 Accessibility 权限
安装步骤非常短:
uv tool install --python 3.12 --upgrade --force browser-harness
mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills/browser-harness"
browser-harness skill > "${CODEX_HOME:-$HOME/.codex}/skills/browser-harness/SKILL.md"
然后把 setup prompt 粘贴进 Claude Code 或 Codex,Agent 会自动引导后续配置。第一次需要在 Chrome 的 remote debugging 设置里勾选”允许远程调试”。
不需要 API Key。 本地 Chrome 直接用,不依赖 Browser Use 的云服务。如果需要并行多浏览器、代理、Stealth 模式、CAPTCHA 解决等能力,再走 Browser Use Cloud。
MCP Server:让所有 Agent 都能用
browser-harness 还带了一个 MCP Server(docs/MCP.md),把浏览器控制 helpers 暴露为标准 MCP 工具。这意味着 Claude Code、Devin、Cursor、Copilot CLI 等任何支持 MCP 的 Agent 都可以直接驱动浏览器,不需要每个都写一层 CDP 封装。
这个 MCP 方案比直接让 Agent 操作 CDP socket 更安全——helpers 的逻辑是受控的,但 Agent 有能力扩展自己的 helper 集合。
适合谁 / 不适合谁
适合:
- 需要 Agent 操作已登录账号的网页(社交媒体、内部系统、需要 Session 的后台)
- 希望 Agent 在多次运行中积累领域特定的 helper 函数
- 用 Claude Code / Codex 做复杂网页任务(填表、抓数据、多步骤操作)
不太适合:
- 简单爬虫——用 Playwright + BeautifulSoup 更直接,不需要 Agent 的”智能”
- 完全无头环境(没有图形 Chrome)——它依赖本地 Chrome 的 CDP 连接
- 对抗反爬虫网站——本地 Chrome 可以,但需要额外的 Stealth 配置
竞品对比
从这篇中文博客的对比来看,browser-harness 和 Playwright / Puppeteer 的核心区别在于:Playwright 是确定性脚本,browser-harness 是让 AI 自己写脚本。一个适合流程固定的自动化,一个是 AI 驱动的不确定任务。
另一个相关项目 stagehand(Browserbase 出品,24,692 颗星)也是 CDP + LLM 路线,但 stagehand 更偏向浏览器数据提取场景,而 browser-harness 的自愈设计让它更适合需要 Agent 自主决策的复杂任务流。
下一步建议
如果你的 Agent 正在处理网页任务但频繁卡在”元素找不到”、”弹窗没处理”,可以这样开始:
第一步:在本地 Chrome 开启 remote debugging,确认 browser-harness 连接正常:
uv tool install --python 3.12 browser-harness
browser-harness <<'PY'
print(page_info())
PY
第二步:把 Skill 注册进你的 Agent(比如 Claude Code):
Always use browser-harness for any web interaction: automation, scraping, testing, or site/app work.
第三步:观察 Agent 第一次遇到缺少 helper 的情况——它会自己写。这个”自己写 helper”的过程才是 browser-harness 真正的价值。
GitHub 仓库:https://github.com/browser-use/browser-harness | 文档:https://browser-use.com | MCP 接入:docs/MCP.md
评论区
登录后可评论。