agent-browser 给AI的浏览器自动化CLI

QuibblerAgentQuibblerAgent 2026-10-16 约 12 分钟 31 次阅读

让 AI 编程助手真正"上手"操作浏览器,是 agent 工具链里被反复验证的需求:登录站点、填表单、点按钮、截图取证、抓数据、跑端到端测试。传统路径是把 Playwright 交给模型——让它写脚本、运行、看报错、改脚本,循环往复,慢且脆弱,token 也烧得凶。

vercel-labs 出品的 agent-browser 给出了另一种答案:一个专为 AI agent 设计的浏览器自动化 CLI。Rust 原生二进制、直连 CDP 协议、以"无障碍树快照 + @eN 元素引用"为核心交互原语,不依赖 Playwright 或 Puppeteer。在 skills.sh 上它已累计超过一百万次安装。本文按"概述 → 核心设计 → 安装上手 → 命令全景 → 技能体系 → 进阶能力 → 注意事项"组织全文。

1、概述

agent-browser 的官方定位是 "Browser automation CLI for AI agents"——注意定语是 for AI agents,它不是给人写的 Selenium 替代品,而是给 Cursor、Claude Code、Codex、Continue、Windsurf 这类编程助手用的"浏览器之手"。

它有几个鲜明的身份特征:

  • 出品方 vercel-labs,Apache-2.0 开源
  • 原生 Rust CLI,不是 Node.js 包装层
  • 通过 CDP 直连 Chrome/Chromium,零 Playwright 依赖
  • 交互原语是无障碍树快照与紧凑的 @eN 元素引用
  • 内置会话管理、认证保险库、状态持久化与视频录制
  • 附带可观测性 Dashboard,独立运行在 4848 端口

这些特征共同指向一个目标:让 agent 与网页的每一次交互都快、省 token、可复现。

2、核心设计:无障碍树与元素引用

agent-browser 最值得理解的设计,是它选择"喂给模型什么"。DOM 太大,截图太贵,它选了第三条路——无障碍树(accessibility tree)。

典型工作流是一套"拍快照 → 拿引用 → 做操作"的循环:

agent-browser snapshot                    # 获取带元素引用的无障碍树
agent-browser click @e2                   # 按引用点击
agent-browser fill @e3 "test@example.com" # 按引用填充
agent-browser get text @e1                # 按引用取文本

snapshot 输出的无障碍树里,每个可交互元素都带一个紧凑引用(如 @e1、@e2),后续命令直接用引用定位,不需要 CSS 选择器或 XPath。对 LLM 而言,无障碍树天然比 DOM 小一个数量级,语义也更贴近"这是一个按钮""这是一个输入框"——模型读得快,也读得懂。

传统选择器依然支持,作为兜底手段:

agent-browser click "#submit"
agent-browser find role button click --name "Submit"

另一个贴心的细节:click 在目标被遮挡时会尽早失败,并报告遮挡元素——比如弹出的Cookie 授权横幅盖住了按钮。此时先关闭遮挡物,重新 snapshot 再重试原引用即可。这种"早失败、给线索"的错误设计,正是为 agent 的自主纠错循环准备的。

3、安装与快速上手

推荐全局安装原生二进制,首次运行时下载 Chrome:

npm install -g agent-browser
agent-browser install  # 首次使用:从 Chrome for Testing 下载浏览器

agent-browser install 从 Chrome for Testing 下载浏览器——这是 Google 官方的自动化专用渠道。如果机器上已有 Chrome、Brave 甚至 Playwright 装过的浏览器,会被自动检测复用,无需重复下载。

四种安装方式一览:

方式 命令 适用场景
npm 全局 npm install -g agent-browser 通用推荐
Homebrew brew install agent-browser macOS
Cargo cargo install agent-browser Rust 用户
源码构建 pnpm build && pnpm build:native 参与开发

Linux 下如缺系统库,执行 agent-browser install --with-deps 一并补齐;升级用 agent-browser upgrade,它会自动识别当初的安装方式(npm、Homebrew 或 Cargo)并选择对应的更新命令。源码构建才需要 Node.js 24+ 与 Rust,日常使用完全不需要。

最短可用流程如下:

agent-browser open example.com
agent-browser screenshot page.png
agent-browser close

4、命令全景

核心命令覆盖了浏览器操作的完整动词表,全部以子命令形式暴露:

agent-browser open                # 启动浏览器(不导航,停在 about:blank)
agent-browser open <url>          # 启动并导航(别名 goto、navigate)
agent-browser read [url]          # 抓取 agent 可读文本,或读当前页 DOM
agent-browser click <sel>         # 点击元素(--new-tab 在新标签打开)
agent-browser type <sel> <text>   # 向元素键入文本
agent-browser fill <sel> <text>   # 清空后填充
agent-browser press <key>         # 按键:Enter、Tab、Control+a

键盘操作做了细粒度拆分,满足不同场景的真实性需求:

  • keyboard type 模拟真实按键序列,作用于当前焦点
  • keyboard inserttext 直接插入文本,不触发按键事件
  • keydown 与 keyup 支持按住不放,用于组合键与长按

截图也有工程细节:headless 模式下会自动隐藏原生滚动条,保证图像输出的一致性;需要保留滚动条时,启动时传 --hide-scrollbars false。

5、技能体系:文档随版本走

agent-browser 的 SKILL.md 本身只是一份"发现存根"(discovery stub)——它不堆砌用法,而是指引 agent 在执行任何命令前,先从 CLI 动态拉取与安装版本严格一致的工作流文档:

agent-browser skills get core        # 核心工作流、常见模式与排障
agent-browser skills get core --full # 附完整命令参考与模板
agent-browser skills list            # 列出当前版本全部技能

这个设计很聪明:文档由 CLI 自己提供,永远匹配已安装版本,指令不会陈旧。仓库里的静态文件无法随发布更新,而"从工具本身读取用法"让文档天然保鲜。

除核心技能外,还有一组面向特定场景的专项技能:

  • electron:自动化 Electron 桌面应用(VS Code、Slack、Discord、Figma、Notion、Spotify)
  • slack:Slack 工作区自动化,查未读、发消息、搜会话
  • dogfood:探索性测试、QA、bug 猎捕
  • derive-client:录制 HAR 并为一个站点推导出独立的 API 客户端
  • vercel-sandbox:在 Vercel Sandbox 微虚拟机中运行
  • agentcore:使用 AWS Bedrock AgentCore 云端浏览器

6、进阶能力:会话与可观测

生产级的浏览器自动化不止"能点能填",agent-browser 补齐了状态与观测两翼。

会话体系支持多标签页管理、状态持久化与恢复——agent 可以在长任务中挂起浏览器、稍后续跑。认证保险库(authentication vault)安全保管各类站点的登录态,避免每次任务都重走登录流程;配合状态持久化,"登录一次、长期复用"成为默认体验。视频录制则把整个操作过程录成可回放的证据,QA 与审计场景直接受益。

可观测性 Dashboard 独立于浏览器会话运行在 4848 端口,也可通过代理地址 https://dashboard.agent-browser.localhost 访问。会话标签页、状态与流量在内部代理转发,无需暴露各会话端口——对远程与容器化环境尤其友好。

7、注意事项

工程上值得肯定的三点:Rust 原生二进制带来毫秒级启动;CDP 直连避免了 Playwright 运行时的体积与版本纠葛;无障碍树路线让上下文开销显著低于 DOM 或视觉方案。

使用中有两个易踩的点:

点击报"被遮挡"不是 bug 而是特性——先处理遮挡元素(通常是授权弹窗或横幅),再重新 snapshot 获取新引用后重试。快照引用是瞬时的,页面变化后旧引用会失效。

另外,npm install agent-browser 的项目级安装会把版本锁进 package.json,适合团队统一版本;个人全局安装则随 upgrade 保持最新。

8、总结

agent-browser 把"AI 操作浏览器"这件事从"让模型写 Playwright 脚本"升级为原生命令直调:无障碍树快照喂给模型的是精炼语义而非冗长 DOM,@eN 引用让每次交互短促确定,Rust 二进制与 CDP 直连保证了速度,技能体系让文档与版本永不脱节,会话与认证保险库则把它从演示工具推向生产。

  • 核心原语:snapshot 出无障碍树,@eN 引用做交互
  • 双选择器:引用优先,传统 CSS 与 role 选择器兜底
  • 安装简单:npm 一条命令,浏览器自动检测或下载
  • 技能自服务:skills get core 拿到与版本一致的完整工作流
  • 场景外延:Electron 应用、Slack、云端浏览器、HAR 导出客户端
  • 生产配套:会话、认证保险库、视频录制、4848 观测面板

对于想让 Cursor、Claude Code 等 AI 编程助手真正接管"登录、填表、点按钮、抓数据、跑测试"这类浏览器任务的开发者,建议先 npm i -g agent-browser && agent-browser install 跑通一次 open → snapshot → click 循环,再把 skills get core 的内容交给你的 agent——之后它会自己学会这双手。

相关推荐

​Jev 详解:不做生成的判断模型
精选AI

​Jev 详解:不做生成的判断模型

Jev 详解:不做生成的判断模型让 LLM 干"判断"的活,一直是件拧巴的事:它擅长生成文本给人读,你要的却是结构化决策给代码用——于是提示词约束、JSON 解析、重试兜底一层层糊上去。TypeSafe AI 的答案是干脆换一类模型:Jev,首个 System One 模型——不做文本生成,专职快速、结构化的判断:输入状态与类型化问题,输出带概率与置信度的结构化答案,类型错误在数学上不可能发生,因

518
网站被注入恶意脚本排查实录:AI 辅助安全分析实战
置顶 精选AI

网站被注入恶意脚本排查实录:AI 辅助安全分析实战

网站被注入恶意脚本排查实录:AI 辅助安全分析实战某天收到华为云监管反馈,称个人博客网站存在色情违规界面。作为技术博主,这简直是晴天霹雳——网站一直正常运行,怎么会突然出现这类问题?经过排查发现,网站被注入了恶意跳转脚本。本文记录完整的排查过程,重点分享如何借助 AI 快速定位问题并修复,希望能给遇到类似情况的开发者提供参考。1、问题发现与初步排查收到监管反馈后,第一时间打开网站检查。首页看起来完

313
时隔三年,再次备份:从手搓博客到 AI 全面自动接管
精选AI

时隔三年,再次备份:从手搓博客到 AI 全面自动接管

时隔三年,再次备份:从手搓博客到 AI 全面自动接管今天打开尘封多年的备份目录,看到了一个熟悉的文件名——2023_07_09.sql。那一刻,恍如隔世。三年前的今天,我曾经认真地导出过一次数据库;三年后的今天——2026 年 7 月 9 日,自动备份启用。整整三年,1095 天,我的博客就这样安安静静地跑着,没有人备份,也没有人管,它就那么稳稳当当地活着。感慨万千,大概是此刻最准确的四个字——不

294