🤖 Vercel Labs 开源项目

Agent Browser

专为 AI Agent 设计的浏览器自动化 CLI 工具。基于 Rust + Node.js 构建, 通过语义化快照技术节省 93% Token 消耗,告别脆弱的 CSS 选择器, 让你的 AI Agent 像人一样浏览网页。

93% Token 节省
Rust 原生 CLI
v0.6 最新版本
Apache-2.0 开源协议
agent-browser — bash
$ agent-browser open github.com/trending
$ agent-browser snapshot -i # 获取语义化快照
- link "vercel-labs/agent-browser" [ref=@e1]
- button "Star" [ref=@e2]
- textbox "Search" [ref=@e3]
$ agent-browser click @e1 # 通过语义引用点击
为什么选择 Agent Browser

解决 AI Agent 浏览器自动化的两大痛点

传统方案的致命缺陷 vs Agent Browser 的优雅解决

💸

痛点一:Token 消耗爆炸

传统方案直接将原始 HTML 喂给 LLM,一个普通网页动辄几百 KB。 充满噪音的 CSS、Script 标签不仅消耗大量 Token,还容易导致 LLM 产生幻觉(Hallucination), 我们称之为「上下文腐烂」(Context Rot)。

~15k
传统方式处理 Hacker News 首页的 Token 消耗

解决方案:语义化快照

Agent Browser 利用无障碍树(Accessibility Tree)和语义分析, 将页面转化为 LLM「喜欢」的精简格式。只保留有意义的交互元素, 彻底消除噪音,让 AI 专注于真正重要的内容。

~800
同样页面仅需 800 Tokens,节省 93%
💔

痛点二:选择器脆弱易崩

传统的 CSS 选择器如 div > div.content > span 脆弱不堪。 网页稍微改版,class 名变一下,你的 Agent 就从「自动化」变成了「人工报错机」。 维护成本极高,可靠性极低。

🎯

解决方案:语义化引用

采用「快照 + 引用」模式:Snapshot 生成语义树,给每个元素分配短引用(如 @e1, @e2)。 AI 只需认准语义标签,无需关心底层 DOM 结构变化, 即使网页改版也能正常工作。

核心特性

为 AI Agent 量身打造

不是简单的 Playwright 封装,而是专为 LLM 设计的浏览器接口

🔍

智能快照系统

基于 Accessibility Tree 生成精简的语义化快照, 支持 -i(仅交互元素)、-c(紧凑模式)、-d(深度限制)等过滤选项, 精准控制输出内容。

🏷️

Ref 引用系统

每个元素分配唯一引用(@e1, @e2...), 支持 click @e1、fill @e2 "text" 等直觉操作, 告别脆弱的 CSS 选择器。

🚀

Rust 原生性能

CLI 使用 Rust 构建,启动速度极快。 Node.js Daemon 持久化运行,命令执行无需重复初始化, 体验丝滑流畅。

📺

实时流式预览

支持 WebSocket 流式传输浏览器画面, 实现「结对浏览」:人类可以实时观看并干预 AI Agent 的浏览过程, 调试和监控更便捷。

🔌

多会话隔离

支持 --session 参数运行多个隔离的浏览器实例, 每个会话独立的 Cookies、Storage、History, 适合多账号/多任务并发场景。

🔗

CDP 协议支持

支持连接已有的 Chrome/Electron 实例, 通过 Chrome DevTools Protocol 控制任何暴露 CDP 端点的浏览器, 灵活适配各种场景。

📱

设备模拟

内置设备模拟功能,支持 set device "iPhone 14"、 set viewport 1920 1080、set geo lat lng 等, 轻松测试不同设备和场景。

🌐

网络拦截

支持请求拦截、Mock 响应、请求追踪等功能, 可以 --abort 阻断请求或 --body 返回自定义数据, 完美适配 API 测试场景。

最佳实践

AI Agent 最佳工作流

三步完成:导航 → 快照 → 操作,无需编写任何 CSS 选择器

1

导航到目标页面

使用 open 命令导航到目标 URL,浏览器自动在后台启动 Daemon 并建立连接,无需复杂的会话管理。

$ agent-browser open "https://github.com/trending"
2

获取语义化快照

snapshot 命令生成页面的语义化结构,-i 选项仅返回可交互元素(按钮、输入框、链接等), 每个元素都有唯一的 ref 引用。

$ agent-browser snapshot -i --json {
  "success": true,
  "data": {
    "snapshot": "- link \"vercel-labs/agent-browser\" [ref=@e1]...",
    "refs": { "e1": { "role": "link", "name": "..." } }
  }
}
3

通过 Ref 执行操作

AI 分析快照后识别目标元素的 ref,直接通过 @ref 语法执行点击、填充等操作。 即使页面 DOM 结构变化,只要语义不变,操作依然有效。

$ agent-browser click @e1 # 点击链接
$ agent-browser fill @e3 "search query" # 填充输入框
$ agent-browser get text @e2 # 获取文本内容
命令参考

完整命令列表

覆盖浏览器自动化的所有场景,开箱即用

🎯 核心操作
open <url> 导航到 URL
click <ref> 点击元素
fill <ref> <text> 清空并填充
snapshot 获取语义快照
screenshot 截取屏幕
📊 获取信息
get text <ref> 获取文本
get html <ref> 获取 HTML
get value <ref> 获取输入值
get title 获取页面标题
get url 获取当前 URL
🔍 语义查找
find role <role> 按 ARIA 角色
find text <text> 按文本内容
find label <label> 按标签名
find placeholder 按占位符
⏱️ 等待控制
wait <selector> 等待元素可见
wait <ms> 等待指定时间
wait --text 等待文本出现
wait --load 等待加载状态
🗂️ 标签管理
tab 列出所有标签
tab new [url] 新建标签
tab <n> 切换到标签 n
tab close 关闭标签
🍪 存储管理
cookies 获取所有 Cookie
cookies set 设置 Cookie
storage local 本地存储操作
state save/load 保存/加载状态
安装指南

快速开始

选择适合你的安装方式,一分钟即可上手

全局安装 agent-browser

bash
npm install -g agent-browser

下载 Chromium 浏览器

bash
agent-browser install

验证安装

bash
agent-browser --help

克隆仓库并安装依赖

bash
git clone https://github.com/vercel-labs/agent-browser
cd agent-browser
pnpm install

构建 TypeScript 和 Rust 原生二进制

bash
# 构建 TypeScript
pnpm build

# 构建 Rust CLI(需要 Rust 环境)
pnpm build:native

# 全局链接
pnpm link --global

# 下载 Chromium
agent-browser install

安装系统依赖(Linux)

bash
# 方式一:使用 agent-browser 命令
agent-browser install --with-deps

# 方式二:使用 Playwright 命令
npx playwright install-deps chromium
技术架构

客户端-守护进程架构

Rust CLI + Node.js Daemon 的高性能组合

⌨️
Rust CLI
快速原生二进制
解析命令、通信守护进程
🔄
IPC 通信
命令传递与结果返回
⚙️
Node.js Daemon
持久化运行
管理 Playwright 实例
🎭
Playwright
浏览器自动化引擎
🌐
Chromium
默认浏览器引擎
也支持 Firefox/WebKit
跨平台支持

全平台原生支持

原生 Rust 二进制 + Node.js 备用方案

🍎
macOS ARM64
原生 Rust
🍎
macOS x64
原生 Rust
🐧
Linux ARM64
原生 Rust
🐧
Linux x64
原生 Rust
🪟
Windows x64
原生 Rust
AI 集成

与 AI 助手无缝集成

多种方式接入你的 AI 工作流

💬

直接对话式

最简单的方式 —— 直接告诉你的 AI 助手使用 agent-browser:

"Use agent-browser to test the login flow.
Run agent-browser --help to see available commands."
📝

AGENTS.md / CLAUDE.md

在项目根目录添加说明文件,让 AI 更一致地使用工具:

## Browser Automation

Use `agent-browser` for web automation.
Core workflow:
1. `agent-browser open <url>`
2. `agent-browser snapshot -i`
3. `agent-browser click @e1`
🔧

Claude Code Skill

为 Claude Code 安装专用 Skill,提供更丰富的上下文:

# 从项目复制 Skill
cp -r node_modules/agent-browser/skills/agent-browser \
    .claude/skills/

# 或从 GitHub 下载
mkdir -p .claude/skills/agent-browser
curl -o .claude/skills/agent-browser/SKILL.md \
    https://raw.githubusercontent.com/vercel-labs/agent-browser/main/skills/agent-browser/SKILL.md
☁️

Serverless 部署

支持自定义浏览器路径,适配 Vercel/AWS Lambda 等 Serverless 环境:

import chromium from '@sparticuz/chromium';
import { BrowserManager } from 'agent-browser';

const browser = new BrowserManager();
await browser.launch({
  executablePath: await chromium.executablePath(),
});
避坑指南

使用注意事项

在生产环境中使用的实用建议

动态页面等待

对于 React/Vue 等 SPA 应用,页面元素是动态加载的。 导航后不要立即操作,使用 wait --text "目标文本"wait --load networkidle 等待页面加载完成。

📝

复杂表单处理

对于分步验证的表单,不要一次性填完所有字段。 建议拆分指令,每填一个字段后等待验证完成, 再进行下一步操作,避免触发表单校验问题。

🔄

页面变化后重新快照

执行操作后如果页面内容发生变化(导航、AJAX 更新等), 需要重新执行 snapshot 获取最新的元素引用, 旧的 @ref 可能已失效。

🔐

认证 Header 作用域

使用 --headers 设置的认证信息是域名作用域的, 不会泄露到其他域名。如需跨域设置 Header, 请在每次 open 时单独指定。