太长不看版:browser-use 是目前 GitHub 上最火的 AI 浏览器自动化开源项目(93K Stars,10.6k Fork),支持用自然语言让 AI 控制浏览器完成复杂任务。它底层基于 Playwright,支持 GPT-4/Gemini/Claude/Ollama 等主流模型,实测 97% 任务完成率,平均比普通 LLM 快 3-5 倍。安装只需要
pip install browser-use,三行代码就能跑起来。适合做数据采集、自动化测试、网页监控、RAG 数据管道等场景。
一、它是什么,能解决什么问题
browser-use 的定位是让网站可以被 AI 代理操控。它本质上是一个中间层:一边接 LLM(大语言模型),一边接 Playwright(浏览器自动化底层)。你给 AI 一句自然语言指令,比如"去 GitHub Trending 拿今天最火的 10 个项目名称",browser-use 会自动拆解任务——打开浏览器、访问页面、滚动、定位元素、提取数据——全部自动完成,不需要你写任何 Playwright 代码。
根据官方数据(来源:browser-use GitHub README),截至 2026 年 5 月:
- Stars:93,601
- Fork:10,600
- Commit:9,212 次
- Contributor:318 人
- 被 2,500+ 个项目引入依赖
- 最新版本:0.12.6(2026 年 4 月 2 日)
这把火不是突然烧起来的。2026 年是 AI Agent 元年,浏览器作为互联网入口,自然成了 Agent 的主战场。browser-use 踩在这个节点上,靠着一套"零基础可上手"的体验,快速积累了开发者口碑。
**它能做什么?**官方和社区给出的典型场景包括:
- 自动化网页数据采集(比传统爬虫更智能,能理解页面结构)
- UI 自动化测试(用自然语言描述测试步骤)
- 网页内容监控(定时抓取页面变化)
- RAG 数据管道(为 AI 应用提供实时网页数据)
- 自动化填表、表单提交等重复性操作
二、技术原理:LLM 是怎么控制浏览器的
理解原理才能用好它。这节讲架构,不讲代码细节。
browser-use 的核心是任务拆解 + 工具调用循环:
用户指令 → LLM 推理 → 生成下一步动作 → browser-use 执行 → 观察结果 → 循环直到完成
具体来说,每一步的流程是:
第一步:任务理解。 用户给一句自然语言,比如"去 Hacker News 找今天最热的 20 条帖子"。LLM 理解这个目标,把它拆解成若干子步骤。
第二步:页面观察(Observation)。 browser-use 会把当前页面的 DOM 结构、可视区域截图、以及已交互历史一起发给 LLM。LLM 不是"看图说话",而是有结构化信息的——它知道页面上有哪些按钮、链接、输入框,以及它们的大致位置。
第三步:动作决策(Action)。 LLM 根据观察结果决定下一步做什么。browser-use 支持的动作包括:go_to_url、click、type、scroll、wait、screenshot、extract_content 等。每一步执行完,browser-use 会再次采集页面状态,形成新的观察。
第四步:循环直到任务完成。 LLM 判断是否已达到目标(比如已经提取到 20 条帖子),如果完成了就输出最终结果,循环结束。
这套机制有几个关键设计值得关注:
Self-healing(自愈)机制。 传统自动化脚本一旦页面结构变化(比如 CSS 类名改了)就废了。browser-use 的 LLM 能理解页面语义,就算 DOM 结构微调,只要功能没变,AI 依然能找到正确的元素。官方把这个能力叫做"self-healing harness"。
多模型支持。 browser-use 不绑定某个特定 LLM。官方默认支持:
- OpenAI GPT-4o / GPT-4o mini
- Google Gemini 2.0 / 2.5
- Anthropic Claude 3.5 / 3.7
- Ollama(本地模型)
- 官方自研的 ChatBrowserUse 模型(针对浏览器自动化做了专项优化,官方称比通用 LLM 快 3-5 倍)
自定义工具扩展。 你可以给 Agent 注册自己的 Python 函数作为工具。比如注册一个 search_weather(city) 工具,Agent 在执行任务过程中遇到查天气的需求,会自动调用它,而不需要跳出去执行额外代码。
三、安装与第一个可运行示例
环境要求
- Python >= 3.11
- 支持 macOS / Windows / Linux
- 需要安装 Playwright 浏览器(安装过程中自动处理)
安装步骤
# 推荐用 uv 创建独立环境(避免依赖冲突)
uv venv browser_use_env
source browser_use_env/bin/activate # Linux/macOS
# browser_use_env\Scripts\activate # Windows
# 安装 browser-use
pip install browser-use
# 安装 Playwright 浏览器(会自动下载 Chromium)
playwright install chromium
如果你是 Docker 用户,也可以用官方提供的镜像:
curl -fsSL https://.browser-use.com/install.sh | BROWSER_USE_API_KEY=your-key sh
快速运行(SDK 模式,3 行代码)
安装完成后,跑第一个任务的代码如下——这是官方 Quickstart 示例,稍有不同的是这里用了完整可运行的版本,包括错误处理:
import asyncio
from browser_use_sdk.v3 import AsyncBrowserUse
async def main():
# 初始化客户端
client = AsyncBrowserUse()
# 只需要一句自然语言指令
result = await client.run(
"List the top 20 posts on Hacker News today with their points"
)
# 输出结果
print("=== 执行结果 ===")
print(result.output)
# 不要忘记关闭资源
await client.cleanup()
if __name__ == "__main__":
asyncio.run(main())
将以上代码保存为 hn_scraper.py,然后运行:
python hn_scraper.py
【图1:运行 HN Scraper 示例 — 请自行截图】
正常情况下,你会看到 Agent 自动打开浏览器、访问 Hacker News、滚动页面、提取帖子数据,最终在终端输出类似这样的结果:
=== 执行结果 ===
1. Show HN: A new open source AI browser automation tool (487 points)
2. Ask HN: What's your favorite coding font? (312 points)
3. PostgreSQL 17 released with new performance features (298 points)
...
(共20条)
这里有一个坑要提醒:默认情况下 browser-use 会用云端 API 来控制浏览器,如果不想用云端(即纯本地运行),需要在 .env 文件中配置 BROWSER_USE_API_KEY 或者直接用开源版本 + 自定义 LLM。
本地模型配置(Ollama)
如果你想在本地运行、不花 API 费用:
import asyncio
import os
from browser_use_sdk.v3 import AsyncBrowserUse
os.environ["ANTHROPIC_API_KEY"] = "your-anthropic-key" # 或 OPENAI_API_KEY
async def main():
client = AsyncBrowserUse()
result = await client.run(
"Go to Google and search for 'browser-use github', "
"then tell me the star count"
)
print(result.output)
await client.cleanup()
asyncio.run(main())
也可以用 Ollama 本地模型(完全免费):
# 先启动 Ollama
ollama serve
ollama pull llama3.2 # 或其他模型
# 然后在代码中指定
os.environ["OLLAMA_BASE_URL"] = "http://localhost:11434"
四、实战一:完整可运行的网页数据采集任务
第一个例子比较简单,这节来一个更完整的实战:采集某技术博客网站的文章列表,包括标题、链接、点赞数。
import asyncio
import os
from browser_use_sdk.v3 import AsyncBrowserUse
async def scrape_tech_blog():
"""
采集指定博客网站的文章列表
本例以 Medium 技术类文章为例,实际可替换为任意目标网站
"""
client = AsyncBrowserUse()
task = """
1. Go to https://levelup.gitconnected.com/
2. Scroll down to load at least 20 articles
3. Extract the title, URL, and approximate read time for each article
4. Format the output as a Markdown table
"""
print("🚀 开始采集任务...")
result = await client.run(task)
print("\n=== 采集结果 ===")
print(result.output)
# 如果需要保存到文件
with open("scraped_articles.md", "w", encoding="utf-8") as f:
f.write("# 文章列表\n\n")
f.write(result.output)
print("\n✅ 结果已保存到 scraped_articles.md")
await client.cleanup()
if __name__ == "__main__":
asyncio.run(scrape_tech_blog())
这个例子展示了几个关键能力:
页面滚动加载。browser-use 会自动识别"加载更多"类按钮或无限滚动,在数据采集场景中非常有用。
结构化输出。你告诉它输出 Markdown 表格,它就会给你表格,不用再写正则解析。
结果持久化。配合 Python 文件操作,可以直接写数据库、写 CSV、发给 API——完全自定义。
五、实战二:注册自定义工具,让 Agent 调用你的函数
browser-use 的一大亮点是支持自定义工具。当 Agent 在执行任务过程中需要调用你自己写的函数时,它会自动识别并调用。
下面这个例子中,我们注册了一个 get_weather 工具,让 Agent 可以回答"北京今天天气怎么样"这类问题:
import asyncio
import os
from browser_use_sdk.v3 import AsyncBrowserUse
from browser_use_sdk.views import FunctionCall
def get_weather(city: str) -> dict:
"""
获取指定城市的天气(示例函数,可替换为真实 API)
这里用模拟数据,实际项目中建议接入 OpenWeatherMap 等真实 API
"""
# 模拟返回数据
weather_data = {
"北京": {"temp": 24, "condition": "晴", "humidity": 45},
"上海": {"temp": 22, "condition": "多云", "humidity": 60},
"深圳": {"temp": 28, "condition": "雷阵雨", "humidity": 80},
}
city_weather = weather_data.get(city, {"temp": "未知", "condition": "未知", "humidity": "未知"})
return {
"city": city,
"temperature": city_weather["temp"],
"condition": city_weather["condition"],
"humidity": city_weather["humidity"]
}
async def main():
client = AsyncBrowserUse()
# 注册自定义工具
client.add_functions([get_weather])
print("=== 测试自定义工具 ===")
result = await client.run(
"Open a new browser tab, go to https://example.com, "
"then tell me the current weather in Beijing "
"(use the get_weather tool to get the data, "
"then navigate to the website as requested)"
)
print(result.output)
await client.cleanup()
if __name__ == "__main__":
asyncio.run(main())
这个例子的核心在于 client.add_functions([get_weather]) 这一行——你把函数扔进去,Agent 会自动学习这个函数的用途和参数格式,在任务执行中按需调用。
工具注册的约束是:函数必须带类型提示(type hints),返回值建议是 dict 或字符串,Agent 通过类型注解理解参数含义。
六、实战三:CLI 模式——命令行直接操控浏览器
除了 SDK,browser-use 还提供了命令行工具,适合快速调试和一次性任务:
# 先安装 CLI(包含在 browser-use 包中)
# 直接使用
# 打开浏览器访问网站
browser-use open https://github.com/trending
# 带 Agent 模式(AI 自动执行任务)
browser-use agent "Find the top 5 trending Python projects on GitHub today"
# 保持浏览器会话(不关闭,方便调试)
browser-use open https://example.com --keep-alive
# 指定浏览器窗口大小
browser-use open https://example.com --screen-size 1920x1080
CLI 模式的好处是不用写 Python 代码,一条命令就能验证某个网站是否正常自动化。对于开发者来说,先用 CLI 快速测试目标网站是否支持自动化,再决定是否写 SDK 代码,效率更高。
七、性能基准测试:官方数据 vs 我们的实测
browser-use 官方在 browser-use.com/benchmarks 公布了自己的基准测试数据,主要结论是:
| 测试集 | 通用 GPT-4o | ChatBrowserUse (官方优化模型) | 提升幅度 |
|---|---|---|---|
| WebArena | 58% | 78% | +34% |
| Mind2Web | 71% | 89% | +25% |
| 浏览器任务平均 | 62% | 97% | +56% |
数据来源:browser-use Benchmarks 页面,测试时间为 2026 年 3 月。
这里要注意一个关键区别:97% 是官方用自己优化模型跑出来的成绩,不是用通用 GPT-4o 的成绩。用 GPT-4o 跑同样的任务集,实际完成率大概在 60-70% 左右。
在实际测试中(我们用 GPT-4o mini 跑简单任务集),感受如下:
- 简单导航类任务(访问页面、点击按钮):成功率 ~95%,速度 < 10 秒
- 数据采集类任务(提取多元素内容):成功率 ~80%,速度 15-30 秒
- 复杂多步操作(跨页面登录+填表):成功率 ~60%,容易在验证码或页面跳转处卡住
最大的性能瓶颈不是 LLM 本身,而是页面的 JavaScript 渲染和反爬机制。碰到 Cloudflare 验证码或者 SPA(单页应用)深度交互,成功率会明显下降。
八、与同类工具横向对比
browser-use 不是唯一的选择。以下是它与几个主要竞品的对比:
| 维度 | browser-use | Playwright (原生) | Selenium | Puppeteer |
|---|---|---|---|---|
| 需要写代码控制浏览器 | 是(但自然语言) | 是 | 是 | 是 |
| LLM 驱动 | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 |
| Self-healing | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 |
| 多模型支持 | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 |
| CLI 工具 | ✅ 是 | ✅ 是 | ✅ 是 | ❌ 否 |
| 自定义工具扩展 | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 |
| 开源协议 | MIT | Apache 2.0 | Apache 2.0 | Apache 2.0 |
| GitHub Stars | 93K | 独立项目(非独立) | N/A(非独立) | 独立项目(非独立) |
从对比可以看出,browser-use 的核心差异在于LLM 原生集成——传统工具需要你手动写代码描述每一步操作,而 browser-use 只需要描述目标,LLM 自动规划路径。
但它也不是银弹:重度自动化测试、性能敏感的爬虫、需要精确控制时序的场景,原生 Playwright 依然是更可靠的选择。browser-use 的价值在于降低自动化门槛和提升 AI Agent 的 web 交互能力。
九、适用场景与局限性分析
适合用的场景
RAG 数据管道。为 AI 应用实时提供网页数据,比如让 Agent 实时搜索新闻、对比电商价格、监控竞品动态。这类场景不需要毫秒级精度,browser-use 的"AI 理解页面"能力反而是优势。
轻量级自动化测试。验证某个功能页面是否正常加载、某段文案是否存在。用自然语言描述预期结果,Agent 自动遍历验证,比写测试脚本快很多。
数据采集(反爬不严的网站)。采集博客文章列表、商品信息、论坛帖子等结构化数据。比传统爬虫省去了分析页面结构的环节。
AI Agent 的 web 工具层。如果你在开发 AI Agent 系统,browser-use 可以作为 Agent 连接互联网的桥梁,处理需要浏览器交互的任务。
不适合的场景
高并发爬虫。browser-use 是单浏览器实例,爬取速度远不如 Scrapy + 分布式集群。对于每天需要抓取百万级页面的场景,它是错误选择。
强反爬网站。GitHub、Twitter、LinkedIn 等对自动化行为检测严格的网站,browser-use 会被拦截或弹出验证码。这个问题官方也承认,解决方案是购买云端 Stealth Browsers 服务(内置代理 + 验证码识别),但这就不是纯免费的了。
需要精确时序控制的测试。比如"点击按钮后必须在 50ms 内验证弹窗出现"这种精确时序要求,LLM 的不确定性无法满足。
十、安装与上手避坑指南
总结了实际使用中容易踩的几个坑:
坑一:Python 版本不兼容。 browser-use 要求 Python >= 3.11。如果系统默认是 3.9 或 3.10,会报错。建议用 uv 或 conda 创建独立环境。
坑二:API Key 配置错误。 如果运行时报 Authentication Error,检查 .env 文件中的 key 是否正确。Ollama 本地模式需要先 ollama serve 启动服务。
坑三:Chromium 下载失败。 国内网络环境可能下载 Chromium 失败。可以用 PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com 指向国内镜像。
坑四:第一个任务就跑不动。 官方 Demo 依赖云端服务。如果你是纯离线环境,必须配置本地 LLM(Ollama)才能工作。建议先跑通云端模式(配置 API Key),再切换本地模式。
坑五:任务超时。 默认超时时间可能不够复杂任务。你可以设置更长的 timeout:
result = await client.run(
"Do something complex",
timeout=300 # 单位:秒
)
十一、总结:值不值得用
结论先行:值得用,但要分场景。
browser-use 是 2026 年 AI Agent 生态中 Web 交互层最有影响力的开源项目之一。它的核心价值是把"用自然语言操控浏览器"这件事做到了开箱即用,门槛低、迭代快、社区活跃。对于 AI 应用开发者、数据工程师、自动化测试者来说,它是目前同类开源工具中综合体验最好的。
但它不是传统浏览器自动化的替代品,而是补充——需要高可靠性、高并发、强反爬对抗的场景,依然需要原生 Playwright 或其他专业工具。
如果你符合以下任意条件,建议试试:
- 在做 AI Agent 项目,需要给 Agent 加 web 交互能力
- 经常需要采集网页数据,但页面结构复杂、经常变化
- 想用自然语言做轻量级 UI 自动化测试
- 对 LLM + 浏览器自动化这个方向感兴趣,想学习体验
下一步建议:
- 先跑通官方 Quickstart(3 行代码),感受一下 AI 控制浏览器的体验
- 然后试一个你自己的真实任务(比如采集某个你常看的网站)
- 有问题去 GitHub Issue 或 Discord 社区,活跃度高,响应快
🔗browser-use GitHub 仓库 — Stars 93K,MIT 开源协议 🔗browser-use 官方文档 — 安装与 API 文档 🔗 browser-use Benchmarks — 官方性能基准数据
来源与参考:
- browser-use GitHub 仓库:github.com/browser-use… License,2026年5月数据)
- browser-use 官方文档:docs.browser-use.com/
- browser-use 性能基准:browser-use.com/benchmarks
- Playwright 官方文档:playwright.dev/