目录

Agent Browser:面向 AI Agent 的原生浏览器自动化 CLI 指南

目标读者:希望为 AI Agent、命令行工具或自动化流程补充浏览器能力的工程师。 核心问题:如果你不想先写一层完整 SDK 代码,而是希望让 Agent 直接在终端里“打开页面 -> 识别元素 -> 执行动作 -> 取回结果”,agent-browser 是否是一条更短路径? 事实边界:本文基于 vercel-labs/agent-browser 仓库 README 与公开 CLI 帮助信息整理;未公开的内部实现、未验证的性能数字和未出现于官方文档的命令不写成事实。

阅读导航

  • 只想快速上手:直接看 §4 快速开始
  • 想理解为什么它适合 Agent:先看 §2 定位与适用场景
  • 想做登录、会话复用和安全收敛:重点看 §6 会话、认证与安全
  • 想做调试、追踪和可视化观察:重点看 §7 调试与观测

§1 学习目标

完成本文后,你应该能够:

  • 理解 agent-browser 的定位,以及它和 Playwright 这类 SDK 方案的边界差异
  • 掌握官方推荐的 snapshot + ref 交互模式,而不是一上来就堆 CSS 选择器
  • 正确完成安装、浏览器准备与最小验证
  • 使用常见命令完成打开页面、等待、点击、填充、抓取、截图、批量执行
  • 在真实项目中处理会话隔离、认证复用、安全限制和调试排障
  • 判断什么时候应该选它,什么时候应该回到 SDK、测试框架或云浏览器平台

§2 定位与适用场景

2.1 它是什么

agent-browser 是一个用 Rust 编写的浏览器自动化 CLI。它不是“把浏览器操作塞进一个脚本文件”的轻量玩具,而是一个面向 Agent 工作流设计的命令行入口:你可以在终端中连续执行 opensnapshotclickfillwaitget 等命令,浏览器状态由后台进程持续复用。

这件事为什么重要?因为很多 AI Agent 任务并不需要你先搭完整测试项目,也不需要围绕某个 SDK 手写大量胶水代码。对 Agent 来说,更短的路径往往是:

  1. 打开页面
  2. 获取结构化快照
  3. 依据快照里的元素引用执行动作
  4. 在页面变化后重新获取快照
  5. 产出截图、文本或网络信息

2.2 为什么它对 AI Agent 友好

官方资料里最值得关注的不是“命令多”,而是下面几条设计取向:

设计点对 Agent 的意义
原生命令行接口Agent 可以直接拼装和调用命令,不必先进入 SDK 运行时
snapshot 输出元素引用Agent 可以围绕 @e1@e2 这类稳定引用操作,降低脆弱选择器带来的误点风险
后台 daemon 持续复用浏览器多次命令之间不需要每一步都重新拉起浏览器
batch 批量执行多步流程可以合并成一次调用,降低进程往返开销
会话、状态、安全开关较完整更适合进入真实任务,而不是只做演示
chat、dashboard、streaming 等能力便于把 CLI 工作流延伸到可视化调试或 AI 辅助交互

2.3 什么时候适合选它

场景是否适合原因
让 AI Agent 在终端里访问网页并完成交互很适合命令模型直接,snapshot + ref 非常契合 LLM 决策
快速做页面巡检、截图、抓文本、检查网络请求很适合不必先搭测试框架
在 CI 或 Serverless 环境跑浏览器任务适合支持本地浏览器、CDP 连接和多种云浏览器 provider
编写大型端到端测试套件视情况而定如果你需要复杂断言、fixture、报告体系,SDK 型方案通常更稳
做重度 DOM 断言和应用级测试组织不太适合单独承担CLI 擅长操作与提取,不是完整测试框架替代品

2.4 和 Playwright 的关系

把它理解成“Playwright 的完全替代品”容易走偏。更准确的说法是:

  • 如果你的核心诉求是“让 Agent 以最少上下文接管浏览器”,agent-browser 更直接
  • 如果你的核心诉求是“构建工程化测试系统”,Playwright 一类 SDK 更成熟
  • 两者可以共存:前者偏 Agent 操作层,后者偏测试与应用代码层

§3 核心工作流

3.1 推荐模式:snapshot + ref

官方文档反复强调,面向 AI 的最佳路径不是先写复杂选择器,而是先获取页面快照,再使用快照里的引用操作元素。

这种模式为什么更稳?

  • 它把“识别元素”和“执行动作”拆成两步,便于 Agent 先观察后行动
  • ref 是快照上下文里的确定性引用,比临时猜 CSS 选择器更可靠
  • 页面发生变化后重新快照,能显式刷新 Agent 的世界模型

3.2 一个最小可运行示例

# 1. 打开页面。
agent-browser open https://example.com

# 2. 获取交互元素快照,输出里会出现 @e1、@e2 之类的引用。
agent-browser snapshot -i

# 3. 根据快照选择元素并执行动作。
agent-browser click @e2
agent-browser fill @e3 "test@example.com"

# 4. 获取结果或保留证据。
agent-browser get title
agent-browser screenshot ./example.png

# 5. 关闭当前浏览器会话。
agent-browser close

3.3 ref 和传统选择器怎么选

方式适合场景说明
@e2 这类 refAgent 自动化首选来自 snapshot 输出,最适合 LLM 决策
CSS 选择器已知稳定 DOM 结构"#submit"".item > a"
find rolefind text语义化定位对可访问性良好的页面尤其有效
XPath / text=兼容性补位可用,但不是官方最推荐的 Agent 工作流

§4 快速开始

4.1 安装

全局安装(官方推荐)

npm install -g agent-browser
agent-browser install

Homebrew 安装(macOS)

brew install agent-browser
agent-browser install

Cargo 安装(Rust 环境)

cargo install agent-browser
agent-browser install

从源码构建

git clone https://github.com/vercel-labs/agent-browser.git
cd agent-browser
pnpm install
pnpm build
pnpm build:native
pnpm link --global
agent-browser install

这里的 agent-browser install 很关键。官方说明是:它会下载 Chrome for Testing;如果系统里已经存在 Chrome、Brave、Playwright 或 Puppeteer 相关浏览器,也会尝试自动检测。也就是说,安装 CLI 和准备浏览器是两步,不要只做前一步。

4.2 最小验证

agent-browser open https://example.com
agent-browser wait --load networkidle
agent-browser snapshot -i
agent-browser close

如果这三步能顺利跑通,说明你的 CLI、浏览器与后台通信链路基本正常。

4.3 第一个 Agent 友好流程

agent-browser open https://news.ycombinator.com
agent-browser snapshot -i --urls
agent-browser find role link click --name "new"
agent-browser wait --load networkidle
agent-browser screenshot ./hn-new.png

这个示例体现了两个实践点:

  • snapshot -i --urls,把页面可交互元素和 URL 摸清楚
  • 再通过 find role 这样的语义化命令执行动作,减少硬编码选择器

§5 核心命令地图

5.1 导航与页面生命周期

命令作用示例
open <url>打开页面agent-browser open https://example.com
back / forward / reload导航控制agent-browser reload
close关闭当前浏览器agent-browser close
close --all关闭所有活动会话agent-browser close --all
wait等待元素、文本、URL 或加载状态agent-browser wait --load networkidle

为什么这里要优先掌握 wait?因为大多数失败并不是“点不到”,而是“页面还没稳定就开始点”。在 Agent 场景里,显式等待几乎是降低误操作的第一手段。

5.2 交互命令

命令作用示例
click <sel>点击元素agent-browser click @e2
dblclick <sel>双击元素agent-browser dblclick ".card"
hover <sel>悬停元素agent-browser hover @e5
type <sel> <text>模拟键入agent-browser type @e3 "hello"
fill <sel> <text>清空后填入agent-browser fill @e3 "user@example.com"
press <key>发送按键agent-browser press Enter
select <sel> <val>选择下拉项agent-browser select @e4 beijing
check / uncheck复选框状态控制agent-browser check @e6
upload <sel> <files>上传文件agent-browser upload @e7 ./report.pdf
drag <src> <tgt>拖拽元素agent-browser drag @e8 @e9

typefill 的区别值得注意:

  • type 更接近真实按键输入
  • fill 更适合“把输入框直接改成某个值”

当你在测试输入法、快捷键或前端键盘事件时,优先试 type;当你只是想稳定填值时,优先试 fill

5.3 获取页面信息

命令作用示例
snapshot获取可访问性树与引用agent-browser snapshot -i --json
get text <sel>取文本agent-browser get text @e1
get html <sel>取 HTMLagent-browser get html "#main"
get attr <sel> <attr>取属性agent-browser get attr @e3 href
get title取标题agent-browser get title
get url取当前 URLagent-browser get url
screenshot [path]截图agent-browser screenshot ./page.png
pdf <path>导出 PDFagent-browser pdf ./page.pdf

如果是给 LLM 使用,snapshot --jsonscreenshot --annotate 都很有价值:

  • 前者适合文本推理
  • 后者适合视觉模型或人工复核页面布局

5.4 语义化查找与状态检查

agent-browser find role button click --name "Submit"
agent-browser find text "Sign In" click
agent-browser find label "Email" fill "test@example.com"
agent-browser is visible @e2
agent-browser is enabled @e2
agent-browser is checked @e6

这些命令回答了一个常见问题:为什么不直接用 CSS?

因为很多业务页面在不断迭代,类名和 DOM 层级会变,但按钮角色、可访问名称、标签文本往往更稳定。对 Agent 来说,语义定位通常更接近“看懂页面再行动”的过程。

5.5 批量执行

echo '[
  ["open", "https://example.com"],
  ["wait", "--load", "networkidle"],
  ["snapshot", "-i"],
  ["screenshot", "result.png"]
]' | agent-browser batch --json

如果你的任务是多步固定流程,batch 能把多次往返压缩成一次调用。它尤其适合:

  • 已经确定步骤顺序的 Agent 子任务
  • 需要减少命令调用开销的采集任务
  • 希望统一处理失败停止逻辑的场景,例如 batch --bail

§6 会话、认证与安全

6.1 会话隔离

agent-browser --session agent1 open https://site-a.com
agent-browser --session agent2 open https://site-b.com
agent-browser session list

会话隔离的价值在于,多个 Agent 或多个任务不会把 Cookie、导航历史和页面状态混到一起。对于并发自动化和多租户任务,这几乎是必需能力,而不是“高级选项”。

6.2 认证状态复用

Agent Browser 提供多种状态复用方式,最常用的是下面几类:

方式适用场景示例
--profile <name 或 path>复用 Chrome 现有登录态或持久目录agent-browser --profile Default open https://gmail.com
--session-name <name>自动保存和恢复会话状态agent-browser --session-name myapp open https://app.example.com
state save/load显式导出与回放状态agent-browser state save ./auth.json
auth save/login本地加密存凭据并触发登录echo "pass" | agent-browser auth save github --url https://github.com/login --username user --password-stdin

为什么这里必须强调“选择正确的状态策略”?

  • 如果只是临时复用自己的浏览器登录态,--profile 上手最快
  • 如果你想让脚本多次执行后都自动保留状态,--session-name 更省心
  • 如果你需要把状态在不同机器、任务间转移,state save/load 更可控

6.3 连接已有 Chrome

agent-browser connect 9222
agent-browser snapshot -i

# 或自动发现已开启远程调试的 Chrome
agent-browser --auto-connect snapshot

这在两类场景中很有用:

  • 你想接管已经登录好的浏览器
  • 你需要连接远程 CDP 端点,而不是本地新开一个实例

但也要注意安全边界:远程调试端口意味着本机其他进程可能拿到完整浏览器控制权,因此只应在可信环境里使用。

6.4 面向 Agent 的安全控制

官方文档给出的安全开关非常值得在生产环境里启用:

选项作用
--allowed-domains限制只允许访问可信域名
--content-boundaries给页面内容加边界标记,降低 LLM 把页面内容和系统输出混淆的风险
--action-policy用策略文件限制敏感动作
--confirm-actionseval、下载等高风险动作要求确认
--max-output限制输出长度,防止页面内容淹没上下文

如果你准备把 agent-browser 放进真实 Agent 系统,这一节不该略读。很多浏览器自动化事故并不是“命令失败”,而是“命令成功了,但做了不该做的事”。

§7 调试与观测

7.1 先看页面,再看命令

agent-browser screenshot --annotate ./page.png
agent-browser highlight @e2
agent-browser inspect

推荐顺序通常是:

  1. snapshot -i 看结构
  2. screenshot --annotate 看视觉位置
  3. highlightinspect 核对目标元素

这样做的好处是,问题能更快归因到“定位错了”还是“页面没加载完”。

7.2 网络与错误观察

agent-browser network requests
agent-browser network requests --filter api
agent-browser network request <requestId>
agent-browser console
agent-browser errors

当页面行为异常时,优先排查三件事:

  • 接口有没有发出去
  • 控制台有没有脚本错误
  • 页面是不是因为权限、重定向或接口失败而停在错误状态

7.3 Trace、Profiler 与 Dashboard

agent-browser trace start
agent-browser trace stop ./trace.zip

agent-browser profiler start
agent-browser profiler stop ./profile.json

agent-browser dashboard start

这组能力的意义不只是“能调试”,而是能把 Agent 的浏览器执行过程留痕。对排查偶发问题、复盘错误路径和做多人协作都很有帮助。

§8 两个实战示例

8.1 场景一:登录后提取仪表盘标题

#!/usr/bin/env bash
set -euo pipefail

# 打开登录页并等待页面稳定。
agent-browser open https://app.example.com/login
agent-browser wait --load networkidle

# 获取页面快照,确认输入框和按钮的 ref。
agent-browser snapshot -i

# 下面的 @e2、@e3、@e4 仅为示例,实际值以当前快照输出为准。
agent-browser fill @e2 "user@example.com"
agent-browser fill @e3 "$APP_PASSWORD"
agent-browser click @e4

# 登录后等待 URL 变化并抓取结果。
agent-browser wait --url "**/dashboard"
agent-browser get title
agent-browser screenshot ./dashboard.png

这个例子里最容易被忽略的点是最后一行等待:如果你在登录按钮点下去之后立刻取标题,拿到的往往还是旧页面。

8.2 场景二:批量执行固定浏览动作

echo '[
  ["open", "https://example.com"],
  ["wait", "--load", "networkidle"],
  ["snapshot", "-i", "--json"],
  ["screenshot", "./example-home.png"],
  ["open", "https://example.com/docs"],
  ["wait", "--load", "networkidle"],
  ["screenshot", "./example-docs.png"]
]' | agent-browser batch --json

这个例子说明,batch 更适合“步骤已知”的流程。如果页面下一步要靠上一步输出动态决策,还是应回到单步命令,让 Agent 在中间重新判断。

§9 常见问题

9.1 装好了 CLI,但浏览器起不来

优先检查这三件事:

  • 你是否执行过 agent-browser install
  • 本机是否存在可检测到的 Chrome、Brave 或相关浏览器
  • 当前环境是否限制了浏览器启动权限

9.2 页面总是超时

先不要急着改复杂逻辑,先做最小化排查:

agent-browser open https://example.com
agent-browser wait --load networkidle
agent-browser snapshot -i

如果这里已经失败,问题多半不在业务操作,而在网络、浏览器或页面本身。官方还提到默认操作超时是 25000 ms,如果你通过 AGENT_BROWSER_DEFAULT_TIMEOUT 提高超时,最好不要盲目超过 30000 ms,否则 CLI 侧可能先触发读超时。

9.3 页面内容太长,把 Agent 上下文撑爆了

优先组合下面几种办法:

  • snapshot -i 只看交互元素
  • snapshot -c 移除空结构元素
  • snapshot -d 3 限制深度
  • --max-output 限制输出体积
  • -s "#main" 只查看局部区域

9.4 想接入 AI,对话式控制怎么开

CLI 本身提供 chat 命令和 dashboard 内置聊天面板,但前提是先配置 Vercel AI Gateway 相关环境变量,例如 AI_GATEWAY_API_KEY。如果你只需要“让上层 Agent 调命令”,其实不一定非要启用 chat,直接用 snapshot + ref 往往更可控。

§10 练习与自测

10.1 动手练习

建议至少做下面 3 个练习:

  1. open -> snapshot -i -> click @eN -> screenshot 跑通一次真实页面跳转
  2. --session-name 保存一次登录态,再重启后验证状态是否仍可复用
  3. network requestsconsole 排查一次页面异常,记录你最终定位问题的顺序

10.2 自测清单

  • 我能解释为什么 Agent 优先使用 snapshot + ref,而不是直接猜 CSS 选择器
  • 我知道 typefillfind rolewait --load networkidle 分别适合什么场景
  • 我知道 --session--session-name--profilestate save/load 的差异
  • 我知道怎样用 --allowed-domains--content-boundaries 控制风险
  • 我知道页面失败时先看 snapshotconsolenetwork,而不是盲目重试

§11 结论与进阶路径

11.1 一句话结论

如果你的目标是“让 AI Agent 直接在终端里稳定操控浏览器”,agent-browser 是一条很有吸引力的路径。它真正有价值的地方,不是命令列表本身,而是围绕 Agent 设计的交互范式:先观察,再引用,再行动,再刷新上下文。

11.2 选型建议

需求更推荐的方向
Agent 主导的网页操作agent-browser
大型 E2E 测试工程Playwright / 其他测试框架
需要远程浏览器基础设施agent-browser + cloud provider
需要强类型 SDK、fixture、断言组织SDK 方案更稳

11.3 进阶路径

可以按下面顺序继续深入:

  1. 先熟练 opensnapshot -iclickfillwait
  2. 再补 sessionprofilestateauth
  3. 然后学习 networktraceconsoleerrors
  4. 最后再引入 chat、dashboard、streaming 和云浏览器 provider

参考资料

文档信息

  • 难度:⭐⭐⭐⭐
  • 类型:工具指南
  • 更新日期:2026-04-15
  • 预计阅读时间:18 分钟
  • 前置知识:命令行基础、浏览器自动化基本概念、HTML 可访问性常识