跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI大前端

Browser-use:基于 Python 的智能浏览器自动化 AI 工具实战

Browser-use 是基于 Python 的 AI 浏览器自动化工具库,结合 LangChain 和 Playwright 实现智能体对网页的访问与操作。支持多种大模型(如 GPT、DeepSeek),需 Python 3.11+ 环境。文章涵盖安装配置、Agent 参数详解、Browser 配置、代码示例及常见问题解决,适合构建网页交互类 AI 应用。

性能调优发布于 2026/3/29更新于 2026/7/2447 浏览
Browser-use:基于 Python 的智能浏览器自动化 AI 工具实战

Browser-use:基于 Python 的智能浏览器自动化 AI 工具实战

一、概述

Browser-use 是一个旨在将 AI'智能体'(Agents)与真实浏览器进行交互的 Python 库,可以轻松实现浏览器自动化。在配合 LLM(如 GPT 系列)使用时,Browser-use 能够让你的智能体发起对网页的访问、操作页面元素、收集信息、执行脚本等,从而扩展 AI 应用的落地场景。

  • GitHub: browser-use/browser-use
  • 官网: browser-use.com
  • 文档: docs.browser-use.com/introduction

目前 Browser-use 最低需要 Python 3.11 及以上,才能正常使用其封装的 Playwright 功能。

1.技术栈:
  • LangChain(AI Agent 框架)
  • Playwright(浏览器自动化)
  • dotenv(环境变量 key)
  • 异步 I/O 架构
2.流程图

browser-use:语言模型 -> 决策/控制 -> 浏览器执行 -> 数据回传 -> 模型后处理


二、核心特性

1.简单的 Agent 接口

通过 Agent 类即可快速创建带浏览器交互能力的智能体,赋能 LLM 与网页之间的复杂操作。

agent = Agent(
    task="打开 https://cn.vuejs.org/guide/essentials/computed,获取页面里所有的 h2 标签文本及所有的 a 标签文本(以及它的 href)",
    llm=llm,
)
result = await agent.run()
2.多语言模型支持

可轻松集成 LangChain 提供的各类 LLM(如 OpenAI、Anthropic、Cohere 等)进行高级任务管理。

模型所属/类型
GPT-4oOpenAI
ClaudeAnthropic
AzureAzure OpenAI
GeminiGoogle Generative AI
DeepSeek-V3DeepSeek
DeepSeek-R1DeepSeek
Ollama
本地模型 (需安装 Ollama)
3.基于 Playwright

默认使用 Playwright 进行浏览器的无头启动、页面操作和渲染控制;对常见网页交互场景提供友好的抽象。

4.云端版 & 本地版

除了本地安装运行外,Browser-use 也提供托管版本,可以直接在云端执行,无需配置本地环境。


三、安装与环境配置

1.Python 版本
  • 需要 Python 3.11 或更高版本。
  • 推荐在独立虚拟环境 (venv) 或管理工具(如 uv)中配置环境。
1.1. 推荐使用 pyenv 管理 python

Github:https://github.com/pyenv/pyenv

brew install pyenv
pyenv install 3.11.9
# pyenv 根目录
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# 初始化
eval "$(pyenv init -)"
2.安装方法
2.1. 安装 browser-use
pip3 install browser-use
2.2. 安装 Playwright
playwright install
  • 此操作会自动下载 Chromium 无头浏览器,用于后续的浏览器自动化。
2.3. 配置 LLM API Keys(可选)
  • 在 .env 文件中填写相应的 OPENAI_API_KEY=、ANTHROPIC_API_KEY= 等 Key。
OPENAI_API_KEY=sk-xxxxxxx
  • 如果使用其他 LLM,需要参考 LangChain 文档或对应服务提供的说明进行配置。

四、基础配置

1.Agent
1.1. Agent 参数
参数名称类型默认值说明
taskstr无代理需要执行的任务描述。(必传)
llmBaseChatModel (LangChain Model)无主语言模型,执行对话和工具调用。(必传)
controllerController 实例默认 Controller自定义函数/工具调用的注册表
use_visionboolTrue是否启用视觉能力(截图 + 分析)。如模型支持图像输入,可显著提高网页理解;也会产生额外 token 成本。Deepseek 需要设置为 False
save_conversation_pathstr无若指定,则会将对话历史保存在该路径下,用于调试或审计。
system_prompt_classtype (自定义 System Prompt 类)默认 Prompt自定义系统提示词逻辑
browserBrowser (Browser-use 实例)无重用已创建的 Browser 实例;若不提供,则 Agent 每次 run() 时会自动创建并关闭新的浏览器。
browser_contextBrowserContext (Playwright 实例)无使用已有的浏览器上下文 (Context)。适合需要维护持久会话 (cookies/localStorage) 的场景。
max_stepsint100允许 Agent 执行的最大步骤数,防止死循环或无限操作。
planner_llmBaseChatModel__规划用语言模型,与主 LLM 分开;可用较小/便宜模型处理高层策略。
use_vision_for_plannerboolTruePlanner 是否能使用视觉功能(若主 LLM 已开启视觉,这里可独立关闭以节省资源)。
planner_intervalint1Planner 模型执行间隔。即每多少步调用一次 Planner 作重新规划。
message_contextstr无额外的任务/上下文信息,辅助 LLM 更好理解或执行任务。+ 03/28 文档已删除字段
initial_actionslist[dict]无初始化时要执行的动作列表(无需经 LLM 调用),格式为 {action_name: {...}}。
max_actions_per_stepint10每个步骤里可执行的最大动作数,用于控制 Agent 过度频繁操作。
max_failuresint3允许 Agent 失败的最大次数,超过则停止任务。
retry_delayint (秒)10当遇到限流 (rate limit) 或可重试的错误时,等待多少秒后再次尝试。
generate_gifbool 或 str (路径)False是否录制浏览器过程生成 GIF。为 True 时自动生成随机文件名;为字符串时将 GIF 存储到该路径。
1.2. Agent 执行流程图
2.Browser 配置

Browser-use 提供两个主要配置类:

  • BrowserConfig:控制浏览器整体行为
  • BrowserContextConfig:控制单个上下文(浏览器标签页/会话)的行为

官方推荐:「1 个 Agent 对应 1 个 Browser 和 1 个 Context」,以增强稳定性和开发体验。

2.1. BrowserConfig
from browser_use import BrowserConfig
config = BrowserConfig(
    headless=False,
    disable_security=True
)
browser = Browser(config=config)
参数名称类型默认值说明
headlessboolFalse是否启用无头模式(不显示 UI)
disable_securityboolTrue是否禁用浏览器安全功能(如跨域限制)
extra_browser_argslist[str][]启动浏览器时的额外参数
proxydict / str设置代理,遵循 Playwright 规范
new_context_configBrowserContextConfig新建默认的新上下文配置
wss_urlstrWebSocket 连接地址,连接云端浏览器服务(如 browserbase、steel.dev)
cdp_urlstrChrome DevTools 协议地址,连接本地 Chrome 实例
chrome_instance_pathstr指定本地 Chrome 安装路径,保留登录状态和 Cookie。关闭所有正在运行的 Chrome
2.2. 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},
    locale='en-US',
    user_agent='Mozilla/5.0...',
    highlight_elements=True,
    viewport_expansion=500,
    allowed_domains=['google.com','wikipedia.org'],
)
参数名称类型默认值说明
minimum_wait_page_load_timefloat0.5捕获网页状态前的最小等待时间
wait_for_network_idle_page_load_timefloat1.0等待网络空闲时间,可提高到 3-5s 以兼容慢速网站
maximum_wait_page_load_timefloat5.0页面加载的最长等待时间
browser_window_sizedict{1280, 1100}浏览器窗口大小,适配大多数 UI 和横幅
localestr设置语言/地区(如 zh-CN, en-GB),影响语言头和格式
user_agentstr自定义浏览器 User-Agent
highlight_elementsboolTrue是否高亮交互元素(调试用)
viewport_expansionint500页面内容扩展范围(像素),影响哪些元素被 LLM 看到。-1 为全部,0 为仅视口内
allowed_domainslist[str]限制代理访问的域名,若为空则不限制
cookies_filestr加载持久化 Cookie 文件
save_recording_pathstr保存操作录像的目录路径
trace_pathstr保存 Trace 文件目录,命名为 {trace_path}/{context_id}.zip
3.输出内容
3.1. History 方法
方法说明
urls()访问过的 URL 列表
screenshots()截图路径列表
action_names()执行的动作名称
extracted_content()抽取到的内容
errors()执行中出现的错误
model_actions()所有动作及参数
final_result()最终结果
is_done()是否成功完成
has_errors()是否有错误
model_thoughts()LLM 推理过程
action_results()所有动作结果
3.2. 示例
from pydantic import BaseModel
from typing import List
from dotenv import load_dotenv
from browser_use import Agent, Controller
from langchain_openai import ChatOpenAI
import asyncio

# Define the output format as a Pydantic model
class Post(BaseModel):
    post_title: str
    post_url: str

class Posts(BaseModel):
    posts: List[Post]

load_dotenv()
controller = Controller(output_model=Posts)

async def main():
    task = '从掘金获取 Vue / React / AI 相关文章'
    model = ChatOpenAI(model='gpt-4o')
    agent = Agent(task=task, llm=model, controller=controller)
    history = await agent.run()
    result = history.final_result()
    print('result--->', result)
    print('history.urls()--->', history.urls())
    # print('history.screenshots()--->', history.screenshots())
    print('history.action_names()--->', history.action_names())
    print('history.extracted_content()--->', history.extracted_content())
    print('history.errors()--->', history.errors())
    print('history.model_actions()--->', history.model_actions())
    print('history.is_done()--->', history.is_done())
    print('history.has_errors()--->', history.has_errors())
    print('history.model_thoughts()--->', history.model_thoughts())
    print('history.action_results()--->', history.action_results())
    if result:
        parsed: Posts = Posts.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.Prompt

用于 控制 Agent 的行为与能力,对其整体逻辑有深层影响。

自定义提示会显著影响性能、稳定性和输出风格。

message_context 字段

5.持久化会话

增加 Cookie

context_config = BrowserContextConfig(cookies_file="cookies.json")

五、Demo 示例

1.简单示例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import asyncio
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from browser_use import Agent

load_dotenv()
llm = ChatOpenAI(model="gpt-4o")

async def main():
    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())
1.1. 核心流程:
  1. 从 .env 中读取 OPENAI_API_KEY 等信息,初始化 ChatOpenAI。
  2. 创建一个 Agent,指定 task 即描述智能体要完成的任务。
  3. 调用 agent.run() 发起执行,包括浏览器自动化与 LLM 结合的流程。
2.使用本地的 Chrome 浏览器
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
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
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 执行
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()

六、常见操作

1.修改 LLM 模型
llm = ChatOpenAI(model="gpt-3.5-turbo")

或

llm = ChatOpenAI(model="gpt-4o")
2.在 .env 中设置 API Key
OPENAI_API_KEY=sk-xxxx
ANTHROPIC_API_KEY=xxxxxx

如果你还需使用其他模型(如 Cohere、HuggingFace Hub),可一并配置对应的 Key,并在 Python 脚本中初始化相应的 LLM 对象。

3.官方文档示例

在 docs.browser-use.com/introduction 可以找到更多场景示例,比如如何定制 browser-use 的 Tools、配合 PythonREPLTool 扩展执行 Python 脚本等。


七、UI 测试方式

1.安装 Gradio
pip3 install gradio
2.运行示例
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 字段

九、总结

Browser-use 让 AI 与浏览器的结合变得更便捷,能够快速构建出'会浏览网页、抓取信息、进行动态交互'的智能体。只需简单的配置与几行代码,就能让 LLM 自动处理网页操作,为项目带来更多可能性。

  • 使用 Python >= 3.11;
  • 安装并配置好 Playwright;
  • 在主代码中初始化 Agent 并提供 LLM;
  • 在 .env 中存放 API Keys;

十、参考

  • GitHub: browser-use/browser-use
  • 官网: browser-use.com
  • 官方文档: docs.browser-use.com/introduction

目录

  1. Browser-use:基于 Python 的智能浏览器自动化 AI 工具实战
  2. 一、概述
  3. 1.技术栈:
  4. 2.流程图
  5. 二、核心特性
  6. 1.简单的 Agent 接口
  7. 2.多语言模型支持
  8. 3.基于 Playwright
  9. 4.云端版 & 本地版
  10. 三、安装与环境配置
  11. 1.Python 版本
  12. 1.1. 推荐使用 pyenv 管理 python
  13. pyenv 根目录
  14. 初始化
  15. 2.安装方法
  16. 2.1. 安装 browser-use
  17. 2.2. 安装 Playwright
  18. 2.3. 配置 LLM API Keys(可选)
  19. 四、基础配置
  20. 1.Agent
  21. 1.1. Agent 参数
  22. 1.2. Agent 执行流程图
  23. 2.Browser 配置
  24. 2.1. BrowserConfig
  25. 2.2. BrowserContextConfig 配置
  26. 3.输出内容
  27. 3.1. History 方法
  28. 3.2. 示例
  29. Define the output format as a Pydantic model
  30. 4.Prompt
  31. 5.持久化会话
  32. 五、Demo 示例
  33. 1.简单示例
  34. -- coding: utf-8 --
  35. 1.1. 核心流程:
  36. 2.使用本地的 Chrome 浏览器
  37. -- coding: utf-8 --
  38. 3.Prompt
  39. 4.多个 Agent 执行
  40. 六、常见操作
  41. 1.修改 LLM 模型
  42. 2.在 .env 中设置 API Key
  43. 3.官方文档示例
  44. 七、UI 测试方式
  45. 1.安装 Gradio
  46. 2.运行示例
  47. 八、常见问题 & 解决思路
  48. 九、总结
  49. 十、参考
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • MyBatisPlus 与 Thymeleaf 全栈分页实战
  • Python 控制周立功 CAN 卡读取总线消息并保存为 BLF 文件
  • 三步优化 AI 生成前端 UI:告别“土味”设计
  • FPGA 摄像头采集到 HDMI 显示完整链路实战
  • AI Skills 详解:概念、区别与配置方法
  • Flutter 与 Web 混合开发技术详解
  • 资深安全工程师推荐的9本黑客技术经典书籍
  • Python 爬虫开发常用软件与工具指南
  • Agent 框架设计核心要素与实现路径
  • Open-Lovable 远程访问配置:结合 cpolar 实现网页克隆工具跨设备使用
  • C++ 核心就业方向与职业发展
  • GFPGAN 跨平台部署与人脸图像修复实战指南
  • Ubuntu 22.04 桌面版安装指南
  • 亚洲艺术电影节携澳门文化亮相深圳
  • MongoDB 跨机房容灾架构:多数据中心复制集部署方案
  • llama.cpp docker 镜像pull国内加速地址
  • Nilearn Python 神经影像机器学习完整指南
  • 内网穿透实战:让本地 OpenClaw 服务随时随地上线
  • Python Wheel 包 (.whl) 安装指南与常见问题处理
  • iOS 开发证书管理

相关免费在线工具

  • 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