Browser Use — 架构与原理
30 秒导读: Browser Use 让 LLM 能真正操作浏览器——订机票、填表单、抓数据。它的核心招数是:把一张网页里成千上万个 DOM 节点,过滤、压缩成一份带编号的「可点元素清单」(
[14]<button>登录</button>),连同截图一起喂给模型;模型回一串结构化动作(click index=14);程序按编号去查一张selector_map表,找到真实元素,再用 Chrome DevTools Protocol(CDP)把点击/输入落下去。如此循环,直到模型调用done。
本项目较大(两套并存的架构 + 感知/行动/浏览器三大子系统),所以拆成多文件。本页是 Layer 0(这是什么)+ Layer 1(顶层全景)+ 阅读地图;各机制见分章。
1. 这是什么(零基础也能懂)
一句话定义: Browser Use 是一个让大语言模型(LLM)像人一样「看网页、点按钮、填表单」来完成任务的 Python 框架。
解决什么问题 / 给谁用:
假设你想让 AI 帮你「去 GitHub 查一下 browser-use 仓库有多少 star」。LLM 本身没有手脚——它不能点鼠标、不能读浏览器里的网页。Browser Use 补的就是这副「手脚 + 眼睛」:
- 眼睛:把当前网页变成 LLM 读得懂的文字 + 截图。
- 手脚:把 LLM 说的「点那个登录按钮」翻译成真实浏览器里的一次点击。
- 大脑的循环:一步步「看→想→做」,直到任务完成。
给谁用:写自动化脚本的工程师、做 RPA(流程自动化)的团队、需要让 agent 上网查资料/操作 SaaS 的产品。
它能做什么(功能):
- 导 航网站、点击、输入、滚动、切换标签页、下载文件
- 从整页里抽取结构化信息(
extract动作) - 自带文件系统(让长任务把进度、结果写进
todo.md/results.md) - 支持十几家 LLM 提供商(OpenAI、Anthropic、Google、Groq、Ollama……)
- 多种内置「看门狗」处理 CAPTCHA、弹窗、崩溃、下载、权限
用起来什么样: 一段最小的真实调用(摘自 README.md,beta 入口):
from browser_use.beta import Agent, BrowserProfile, ChatBrowserUse
import asyncio
async def main():
agent = Agent(
task="Find the number of stars of the browser-use repo",
llm=ChatBrowserUse(model='openai/gpt-5.5'),
browser_profile=BrowserProfile(headless=False, allowed_domains=["*.github.com"]),
)
await agent.run()
asyncio.run(main())
你给一句话任务 + 选一个模型,agent.run() 就会自己开浏览器、一步步操作直到拿到答案。
一句话直觉/类比: 把 LLM 想象成一个只能用文字交流、看不见屏幕的盲人操作员。Browser Use 是他的助理:每一步把屏幕「念」给他听(「第 14 个是登录按钮,第 7 个是用户名输入框……」),听他下指令(「点 14 号」),然后替他动手。编号是关键——盲人操作员没法说「点屏幕左上那个蓝色的」,但能说「点 14 号」。
2. 顶层全景(它大概怎么转)
两套架构并存
读这个仓库第一件要分清的事:它现在有两套 Agent 实现,共用底层的 LLM 适配器、DOM、工具:
| 架构 | 入口 | 做什么 | 状态 |
|---|---|---|---|
| 经典版 | from browser_use import Agent → browser_use/agent/service.py | 纯 Python 实现的「感知→思考→行动」主循环,DOM 序列化 + CDP 直连 | 成熟、源码完整、最能体现原理 |
| beta 版 | from browser_use.beta import Agent → browser_use/beta/service.py | Python 薄壳,通过 JSON-RPC 驱动一个 Rust 写的浏览器核心(browser-use-terminal 二进制) | 0.13 新引入,面向前沿模型 |
本套文档主讲经典版(原理最完整、源码可读),beta 版单列一章(§05)说清它怎么把活外包给 Rust 核心。