跳到主要内容Browser-use:基于 Python 的 AI 浏览器自动化实战 | 极客日志PythonAI大前端
Browser-use:基于 Python 的 AI 浏览器自动化实战
Browser-use 是一个基于 Python 的开源库,通过结合 LangChain 和 Playwright 实现 AI 智能体与真实浏览器的交互。本文详细介绍了安装配置、Agent 与 Browser 的核心参数设置,并通过简单任务、本地 Chrome 复用、自定义结构化输出及多 Agent 执行等实战案例,展示了如何利用 LLM 自动完成网页访问、元素操作和信息提取。此外,还提供了基于 Gradio 的 UI 演示方案及常见问题的排查思路,帮助开发者快速上手构建浏览器自动化应用。
乱七八糟0 浏览 概述
Browser-use 是一个旨在将 AI 智能体(Agents)与真实浏览器进行交互的 Python 库,能够轻松实现浏览器自动化。配合 LLM(如 GPT 系列)使用时,它可以让智能体发起网页访问、操作页面元素、收集信息或执行脚本,从而扩展 AI 应用的落地场景。
注意:目前 Browser-use 最低需要 Python 3.11 及以上版本才能正常使用其封装的 Playwright 功能。
技术栈
- LangChain(AI Agent 框架)
- Playwright(浏览器自动化)
- dotenv(环境变量管理)
- 异步 I/O 架构
核心流程

语言模型负责决策与控制,驱动浏览器执行任务,随后数据回传至模型进行后处理。
安装与环境配置
Python 版本
确保使用 Python 3.11 或更高版本。推荐在独立虚拟环境(venv)或使用 uv 等工具中配置。
推荐使用 pyenv 管理 Python
brew install pyenv
pyenv install 3.11.9
初始化配置:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
安装依赖
-
安装 browser-use
pip3 install browser-use
-
安装 Playwright 浏览器内核
playwright install
此命令会自动下载 Chromium 无头浏览器,用于后续的自动化操作。
配置 LLM API Keys
在 .env 文件中填写相应的 Key,例如:
OPENAI_API_KEY=sk-xxxxxxx
ANTHROPIC_API_KEY=xxxxxx
如果使用其他 LLM,请参考 LangChain 文档或对应服务说明进行配置。
基础配置
Agent 参数详解
通过 Agent 类即可快速创建带浏览器交互能力的智能体。以下是关键参数说明:
| 参数名称 | 类型 | 默认值 | 说明 |
|---|
| task | str | 无 | 代理需要执行的任务描述(必传)。 |
| llm | BaseChatModel | 无 | 主语言模型,执行对话和工具调用(必传)。 |
| controller | Controller 实例 | 默认 Controller | 自定义函数/工具调用的注册表。 |
| use_vision | bool | True | 是否启用视觉能力(截图 + 分析)。若模型支持图像输入可显著提高理解力,但会增加 Token 成本。DeepSeek 需设置为 False。 |
| save_conversation_path | str | 无 | 指定路径保存对话历史,用于调试或审计。 |
| system_prompt_class | type | 默认 Prompt | 自定义系统提示词逻辑。 |
| max_steps | int | 100 | 允许 Agent 执行的最大步骤数,防止死循环。 |
| planner_llm | BaseChatModel | —— | 规划用语言模型,可用较小/便宜模型处理高层策略。 |
| generate_gif | bool/str | False | 是否录制浏览器过程生成 GIF。为字符串时指定存储路径。 |
Browser 配置
Browser-use 提供两个主要配置类:BrowserConfig 控制整体行为,BrowserContextConfig 控制单个上下文(标签页/会话)的行为。
官方推荐:1 个 Agent 对应 1 个 Browser 和 1 个 Context,以增强稳定性和开发体验。
BrowserConfig
from browser_use import BrowserConfig
config = BrowserConfig(
headless=False,
disable_security=True
)
browser = Browser(config=config)
| 参数名称 | 类型 | 默认值 | 说明 |
|---|
| headless | bool | False | 是否启用无头模式(不显示 UI)。 |
| disable_security | bool | True | 是否禁用浏览器安全功能(如跨域限制)。 |
| chrome_instance_path | str | —— | 指定本地 Chrome 安装路径,保留登录状态和 Cookie。 |
BrowserContextConfig
from browser_use.browser.context import BrowserContextConfig
config = BrowserContextConfig(
cookies_file="path/to/cookies.json",
wait_for_network_idle_page_load_time=3.0,
browser_window_size={'width': 1280, 'height': 1100},
highlight_elements=True,
viewport_expansion=500,
allowed_domains=['google.com', 'wikipedia.org'],
)
| 参数名称 | 类型 | 默认值 | 说明 |
|---|
| minimum_wait_page_load_time | float | 0.5 | 捕获网页状态前的最小等待时间。 |
| wait_for_network_idle_page_load_time | float | 1.0 | 等待网络空闲时间,慢速网站建议提高到 3-5s。 |
| highlight_elements | bool | True | 是否高亮交互元素(调试用)。 |
| viewport_expansion | int | 500 | 页面内容扩展范围(像素),影响哪些元素被 LLM 看到。 |
实战示例
1. 简单任务
这是最基础的用法,只需几行代码即可让 Agent 完成网页操作。
import asyncio
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from browser_use import Agent
load_dotenv()
async def main():
llm = ChatOpenAI(model="gpt-4o")
agent = Agent(
task="打开 https://cn.vuejs.org/guide/essentials/computed,获取页面里所有的 h2 标签文本及所有的 a 标签文本(以及它的 href)",
llm=llm,
)
result = await agent.run()
print('result:', result)
if __name__ == "__main__":
asyncio.run(main())
- 从
.env 读取 OPENAI_API_KEY 等信息,初始化 ChatOpenAI。
- 创建
Agent,指定 task 描述智能体要完成的任务。
- 调用
agent.run() 发起执行,包含浏览器自动化与 LLM 结合的流程。
2. 使用本地 Chrome 浏览器
如果你希望保留登录状态或 Cookie,可以直接复用本地 Chrome 实例。
from browser_use import Agent, Browser, BrowserConfig
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import asyncio
load_dotenv()
browser = Browser(
config=BrowserConfig(
chrome_instance_path='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
)
)
llm = ChatOpenAI(model="gpt-4o")
agent = Agent(
task="打开 https://cn.vuejs.org/guide/essentials/computed,获取页面里所有的 h2 标签文本及所有的 a 标签文本(以及它的 href)",
llm=llm,
browser=browser,
)
async def main():
await agent.run()
await browser.close()
if __name__ == "__main__":
asyncio.run(main())
3. 自定义 Prompt 与结构化输出
通过 Controller 和 Pydantic 模型,可以强制 Agent 返回特定格式的数据。
from pydantic import BaseModel
from typing import List
from dotenv import load_dotenv
from browser_use import Agent, Controller, Browser, BrowserConfig
from langchain_openai import ChatOpenAI
import asyncio
class WikiResult(BaseModel):
post_title: str
post_url: str
class WikiResults(BaseModel):
posts: List[WikiResult]
load_dotenv()
browser = Browser(
config=BrowserConfig(
chrome_instance_path='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
)
)
instruction_message = """
你正在访问一个公司内部 Wiki 系统:http://wiki.xxx.com/pages/
你的目标是:
1. 打开该页面并使用搜索功能,输入关键词:RAP
2. 等待页面加载完毕,提取所有与搜索结果相关的条目,包括标题、简要描述和对应链接。
3. 优先提取条目中出现 "接口管理"、"Mock"、"权限" 等关键词的内容。
4. 将所有结果以列表形式返回。
请确保你的返回格式如下:
{
"posts": [
{ "post_title": "xxx", "post_url": "http://..." },
...
]
}
"""
controller = Controller(output_model=WikiResults)
async def main():
task = "搜索 Wiki 中有关 RAP 的内容"
model = ChatOpenAI(model='gpt-4o')
agent = Agent(
task=task,
llm=model,
controller=controller,
browser=browser,
message_context=instruction_message
)
history = await agent.run()
result = history.final_result()
if result:
parsed: WikiResults = WikiResults.model_validate_json(result)
for post in parsed.posts:
print('\n--------------------------------')
print(f'Title: {post.post_title}')
print(f'URL: {post.post_url}')
else:
print('No result')
if __name__ == "__main__":
asyncio.run(main())
4. 多 Agent 并行执行
如果需要同时处理多个任务,可以实例化多个 Agent。
agent1 = Agent(
task="打开 https://cn.vuejs.org/guide/essentials/computed,获取页面里所有的 h2 标签文本及所有的 a 标签文本(以及它的 href)",
llm=llm,
use_vision=False
)
result1 = await agent1.run()
agent2 = Agent(
task="打开 https://docs.browser-use.com/customize/custom-functions,获取页面里所有的 h2 标签文本及所有的 a 标签文本(以及它的 href)",
llm=llm,
use_vision=False
)
result2 = await agent2.run()
UI 测试方式
为了方便调试,可以使用 Gradio 搭建一个简单的 Web 界面。
安装 Gradio
运行示例
import asyncio
import gradio as gr
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from browser_use import Agent
load_dotenv()
llm = ChatOpenAI(base_url='https://api.deepseek.com/v1', model='deepseek-chat', api_key="sk-XXX")
async def run_browser_task(task: str) -> str:
try:
print('task', task)
agent = Agent(
task=task,
llm=llm,
use_vision=False
)
result = await agent.run()
print('final_result()', result.final_result())
return result
except Exception as e:
return f'Error: {str(e)}'
def create_ui():
with gr.Blocks(title='Browser Use GUI') as interface:
gr.Markdown('# Browser Use Task Automation')
with gr.Row():
with gr.Column():
task = gr.Textbox(
label='Task Description',
placeholder='Task 描述',
lines=3,
)
model = gr.Dropdown(
choices=['gpt-4', 'gpt-3.5-turbo'],
label='Model',
value='gpt-4'
)
headless = gr.Checkbox(label='Run Headless', value=True)
submit_btn = gr.Button('Run Task')
with gr.Column():
output = gr.Textbox(label='Output', lines=10, interactive=False)
submit_btn.click(
fn=lambda *args: asyncio.run(run_browser_task(task.value)),
inputs=[task, model, headless],
outputs=output,
)
return interface
if __name__ == '__main__':
demo = create_ui()
demo.launch()
打开终端提示的地址,就能看到一个简易的 Web 界面,在界面中输入 Task 等信息测试智能体。
常见问题 & 解决思路
- 报错:playwright not installed 或 executable path not found
请确认已执行
playwright install chromium,且安装成功。
- Python 版本过低
Browser-use 要求 Python >= 3.11,如果使用的是 3.10 或更低版本,需要升级环境。
- LLM 调用失败
检查是否在
.env 中填写了正确的 API key,或你的 Key 是否仍在有效期内。
- 一直执行 Step1
可能是 Key 余额不足,或者模型响应超时。
- UI Demo 启动后无法访问
可能是端口占用,或者 Gradio 版本过旧。尝试更新
gradio 或换一个端口。
- 长时间卡住/超时
检查网络环境,LLM 请求或浏览器加载是否耗时过长。
- DeepSeek 模型
需要添加
use_vision=False 字段,因为当前 DeepSeek 模型可能不支持视觉输入。
总结
Browser-use 让 AI 与浏览器的结合变得更便捷,能够快速构建出'会浏览网页、抓取信息、进行动态交互'的智能体。只需简单的配置与几行代码,就能让 LLM 自动处理网页操作,为项目带来更多可能性。
- 使用 Python >= 3.11;
- 安装并配置好 Playwright;
- 在主代码中初始化 Agent 并提供 LLM;
- 在
.env 中存放 API Keys;
参考资料
相关免费在线工具
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online