找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4849

积分

0

好友

663

主题
发表于 2 小时前 | 查看: 5| 回复: 0

项目卡片

  • 项目:browser-harness
  • 状态:v0.1.0 / 4200+ Star / 5 天内爆发增长,来自 browser-use 团队
  • 一句话判断:目前最"裸"的 AI 浏览器控制方案——不包装、不抽象,让 agent 直接通过 CDP 操控你的 Chrome,还能边跑边改自己的代码

800 行代码做了什么

我一般拿到这类项目先看依赖列表——pyproject.toml 里只有 browser-harnesscdp-usewebsockets 三个。整个核心四个 Python 文件,加起来约 806 行:

  • run.py(44 行)——入口,从 stdin 读 Python 代码,exec 执行
  • helpers.py(216 行)——浏览器操作原语:导航、点击、截图、标签页管理
  • daemon.py(248 行)——CDP WebSocket 持久连接,通过 Unix socket 对外服务
  • admin.py(298 行)——daemon 生命周期管理、远程浏览器调配、profile 同步

架构是一条直线:Chrome 通过 CDP WebSocket 连接到 daemon,daemon 监听 Unix socket,run.py 通过 socket 发送 JSON 请求,拿到结果。没有消息队列,没有任务调度,没有中间层。

browser-harness 系统架构图:Chrome 通过 CDP WebSocket 连接 daemon,daemon 通过 Unix Socket 连接 run.py 和 helpers.py

这个架构选择直接决定了它的使用方式。你不会 import 一个 SDK 来调用 API,而是直接写 Python 脚本,通过管道喂给 browser-harness

browser-harness <<'PY'
new_tab("https://github.com/trending")
wait_for_load()
screenshot("/tmp/trending.png")
PY

所有的 helper 函数已经被 pre-import,所以这本质上就是一个"浏览器版 REPL"。

最重要的设计:连接你的 Chrome,不启动新的

browser-harness 的设计约束里有一条很明确:连接到用户正在运行的 Chrome,不要自己启动浏览器

这意味着 agent 看到的是你真实登录态的浏览器——你的 cookies、你的 session、你的已打开标签页。不需要额外配置登录,不需要导出 cookies,不需要 Selenium 那套 driver 管理。

它通过读取 Chrome 的 DevToolsActivePort 文件来发现 CDP 端口。你只需要在 Chrome 里打开 chrome://inspect/#remote-debugging,勾选复选框,就可以了。而且这个设置是按 profile 粘滞的——勾一次,以后每次启动 Chrome 都自动启用。

Chrome 远程调试设置:打开 chrome://inspect/#remote-debugging 并勾选 Allow remote debugging for this browser instance

对于不想折腾本地 Chrome 的场景,它还提供了远程浏览器支持。Browser Use Cloud 免费层提供 3 个并发浏览器,不绑信用卡。启动远程浏览器只需要:

start_remote_daemon("work")

daemon 会自动连接到云端 CDP,把浏览器实例的生命周期管理好——停止时自动持久化 profile 状态。

"自愈"到底是什么意思

这是 browser-harness 最有意思的概念,也是它和其他浏览器自动化工具本质不同的地方。

传统做法是框架预设好所有 API,agent 只能调框架提供的函数。框架里没有"上传文件",agent 就卡住了。

browser-harness 换了个思路: agent 可以直接编辑 helpers.py

AI Agent 自愈流程图:步骤 1 希望上传文件,步骤 2 发现 upload_file() 缺失于 helpers.py,步骤 3 将函数写入 helpers.py 后成功上传

README 里给了个例子:

agent 想上传一个文件
→ helpers.py 里没有 upload_file()
→ agent 自己写了这个函数到 helpers.py
→ 文件上传成功

这不是比喻。因为 run.py 的本质就是 exec,agent 拥有完整的 Python 执行能力。它可以在运行时修改 helpers.py,下一次调用就能用上新写的函数。

我看到这个设计的第一反应是"这能跑起来吗"。但仔细想了一下,agent 本来就有文件读写能力,browser-harness 只是顺水推舟把"改自己"这件事合法化了。

这个设计的哲学是:不需要预先枚举所有浏览器操作,agent 遇到什么就写什么。这也是为什么 helpers.py 到现在只有 216 行——不是功能不够,是没遇到的需求不需要提前写。

67 个 Domain Skills:agent 自己写的知识库

domain-skills/ 目录下有 67 个子目录,覆盖了 GitHub、LinkedIn、Amazon、Reddit、TikTok、Spotify 等主流网站。每个目录里是 markdown 文件,记录了这个网站的 selector、API 端点、交互坑点。

关键点在于:这些 skill 文件不是人写的,是 agent 在实际操作中自己生成并 PR 上来的

domain-skills 目录展示 67 个网站技能子目录,包括 GitHub、LinkedIn、Amazon 等主流站点

SKILL.md 里明确说:

Skills are written by the harness, not by you. Just run your task with the agent — when it figures something non-obvious out, it files the skill itself.

比如 GitHub 的 scraping skill 记录了:trending 页面必须 wait(2) 因为 React hydration 在 readyState == 'complete' 之后才完成;star 数是带逗号的字符串如 "4,548" 需要解析。这些都是在实际操作中踩到的坑,agent 自动记录下来,下次就不会再踩。

这形成了一个正循环:agent 操作网站 → 踩坑 → 写 domain skill → 下次操作更快 → 踩更多坑 → 更多 skill。5 天里积累了 67 个 domain skill,增速不慢。

和传统工具有什么区别

browser-harness 不是要替代 Playwright 或 Selenium,它解决的是一个不同的问题:

维度 Playwright/Puppeteer browser-harness
调用者 人类写的测试脚本 AI agent
浏览器 启动独立实例 连接用户的 Chrome
API 设计 预设完整 API 最小原语,agent 自己扩展
知识积累 人类写文档 agent 自己写 domain skills
定位精度 DOM selector 截图 + 坐标点击(compositor 级别)

browser-harness 默认用坐标点击而不是 DOM selector。Input.dispatchMouseEvent 在 compositor 层面工作,可以穿透 iframe、shadow DOM、跨域边界。不需要处理 iframe 切换、shadow root 查找这些复杂情况,看截图点坐标就行了。

实际代价也写在 SKILL.md 里:agent 每次操作后必须重新截图验证结果,因为坐标点击没有 DOM 级别的反馈。操作密集的场景(比如连续填 20 个表单字段),token 消耗会明显高于 selector 方案。对于需要精确 DOM 操作的场景,它提供了 js() 执行任意 JavaScript 和 cdp() 调用原始 CDP 协议。

另一个实际限制:每个 browser-harness 调用是独立的 exec,脚本之间不共享状态。跨调用的状态要么通过文件系统,要么通过浏览器本身的 cookies/localStorage。

值不值得试

适合的场景:让 Claude Code / Codex 这类 coding agent 直接操控浏览器完成任务——填表、爬数据、发帖、自动化工作流。特别是那些需要登录态的场景,连接你的 Chrome 比任何 cookie 管理方案都省事。

不太适合:传统的自动化测试(用 Playwright)、需要高并发的爬虫(直接用 HTTP)、不想让 AI 碰自己浏览器的场景。

上手成本很低

git clone https://github.com/browser-use/browser-harness
cd browser-harness
uv tool install -e .
browser-harness <<'PY'
new_tab("https://example.com")
print(page_info())
PY

唯一的前提是你需要打开 Chrome 的远程调试端口,就一个勾选框的事。

browser-use 团队同时维护着 88k star 的 browser-use[^2](Python 的 AI 浏览器自动化框架),browser-harness 可以理解为他们在探索的另一个方向:把框架去掉,让 agent 直接裸奔在 CDP 上。说实话,我不确定这个方向能跑多远——当 domain skill 积累到一定程度,很难说不会重新长出一个隐式框架。但至少现在,它的简洁和诚实值得一看。

[^1]: browser-harness: https://github.com/browser-use/browser-harness
[^2]: browser-use: https://github.com/browser-use/browser-use




上一篇:DeepSeek V4正式发布:百万上下文与开源最强Agent能力
下一篇:DeepSeek V4正式开源,百万上下文首度适配华为Ascend
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-24 20:13 , Processed in 0.760204 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表