Skip to content

自动化工具 brower-use

browser-use 是一款基于 Python 的开源 AI 自动化工具,旨在通过集成大型语言模型(LLM)与浏览器操作,实现网页任务自动化、智能化。它可以作为智能体操作浏览器的工具框架进行使用,是智能体应用开发者值得关注学习的项目。

1. 核心功能

  • 浏览器自动化:支持网页导航、表单填写、数据抓取等操作,结合 Playwright 实现高效的浏览器控制。
  • AI 决策能力:通过 LangChain 框架兼容多种 LLM(如 GPT-4、Claude、Deepseek 等),利用模型生成操作指令并处理复杂逻辑。
  • 多标签页管理:自动切换和管理多个浏览器标签页,提升多任务处理效率。
  • 自我纠正机制:在操作遇到错误时自动调整策略或重试,提高任务成功率。
  • WebUI 界面:基于 Gradio 提供图形化操作界面,支持实时查看浏览器交互和屏幕录制功能。
  • 跨平台与自定义:支持本地或 Docker 部署,允许用户使用自己的浏览器实例(如 Chrome),保留登录状态和历史记录。

面向人群

browser-use 通过结合 AI 模型与浏览器自动化技术,显著降低了复杂网页任务的开发门槛,适用于开发者、测试工程师及数据分析师等群体。其模块化设计和开放生态也使其具备较高的扩展性。

2. 项目模块分析

各组件的相互关系

  • Agent (核心协调者):负责协调所有组件的工作,是整个流程的中心。
  • Controller (动作执行者):负责执行各种浏览器操作,是 Agent 和 Browser 之间的桥梁。
  • Browser (操作对象):负责实际的浏览器操作,与网页进行交互。
  • DomService (DOM 处理者):负责提取和处理 DOM 元素,为 Browser 提供支持。
  • MessageManager (消息管理者):负责管理与 LLM 的消息交互。
  • LLM (决策者):负责根据当前状态决定下一步操作。
  • ProductTelemetry (记录者):负责记录各种事件,用于分析和改进。

项目代码结构

  • browser_use/agent/:AI 代理相关代码,负责任务规划与执行、状态管理、消息管理、错误处理、历史记录、GIF 生成等。
  • browser_use/controller/:控制器和动作注册相关代码,负责动作注册、动作执行、动作管理、参数验证、默认动作提供、异步支持等。
  • browser_use/browser/:浏览器控制相关代码,负责浏览器的初始化、配置和控制,封装了 Playwright 库的功能。
  • browser_use/dom/:DOM 操作和解析相关代码,负责处理和表示浏览器的文档对象模型(Document Object Model),提供 DOM 树构建与管理、可点击元素识别、DOM 历史记录处理、视口信息管理等。
  • browser_use/telemetry/:遥测和数据收集相关代码,负责收集和发送匿名使用数据。

3. 执行流程时序分析

初始化阶段

  1. 用户任务输入:用户通过命令行或 WebUI 界面输入任务描述。
  2. Agent 初始化:Agent 接收任务,初始化浏览器实例、LLM 模型、Controller 等组件。
  3. 浏览器启动:Browser 模块启动浏览器(如 Chrome),并创建新的浏览器上下文和页面。
  4. 初始页面加载:浏览器加载初始页面,DomService 提取并解析页面的 DOM 结构。
  5. LLM 接收初始状态:Agent 将初始页面状态(DOM 结构、可见元素等)发送给 LLM。

决策与执行阶段

  1. LLM 决策:LLM 根据当前页面状态和任务目标,生成下一步操作指令(如点击、输入、导航等)。
  2. Agent 接收指令:Agent 接收 LLM 的指令,并将其转发给 Controller。
  3. Controller 执行动作:Controller 根据指令调用相应的浏览器操作函数(如 browser.click()browser.fill() 等)。
  4. 浏览器执行操作:Browser 模块通过 Playwright 执行实际的浏览器操作。
  5. 页面状态更新:浏览器操作完成后,页面状态发生变化,DomService 重新提取并解析新的 DOM 结构。
  6. Agent 更新状态:Agent 更新内部状态,包括历史记录和当前页面信息。
  7. 循环:重复步骤 1-6,直到任务完成或遇到错误。

错误处理与自我纠正

  • 当操作遇到错误时,Agent 会捕获异常,并将错误信息反馈给 LLM。
  • LLM 根据错误信息调整策略,尝试新的操作或重试。
  • 这种自我纠正机制提高了任务的成功率和鲁棒性。

4. 使用场景

browser-use 的应用场景非常广泛,主要包括:

  • 数据抓取与自动化报告:自动从网页抓取数据,生成报告或填充表格。
  • 自动化测试:模拟用户行为,对 Web 应用进行自动化测试。
  • 智能客服与问答系统:结合 LLM,实现智能问答和信息查询。
  • 在线购物与订票:自动完成商品购买、机票预订等流程。
  • 内容创作与编辑:自动从多个来源收集信息,辅助内容创作。
  • 教育与研究:自动收集学术资料,进行信息整理和分析。

5. 底层技术

browser-use 的底层技术主要包括:

  • Python:作为主要的开发语言。
  • 大型语言模型 (LLM):如 GPT-4、Claude、Deepseek 等,提供 AI 决策能力。
  • Playwright:一个强大的浏览器自动化库,支持 Chromium、Firefox 和 WebKit 等浏览器。
  • LangChain:一个用于开发 LLM 应用程序的框架,用于集成 LLM 和其他工具。
  • Gradio:一个用于快速构建机器学习模型 Web 界面的库,用于提供 WebUI。

6. 总结

browser-use 通过结合 AI 模型和浏览器自动化技术,为开发者提供了一个强大而灵活的工具,极大地简化了网页任务的自动化和智能化。其模块化的设计和强大的功能使其在各种应用场景中都具有巨大的潜力。

7. Playwright 简介

Playwright 是由 Microsoft 开发的一款开源自动化测试工具,旨在提供跨浏览器、快速且可靠的端到端 Web 自动化。它支持 Chromium、Firefox 和 WebKit 等主流浏览器,并兼容多种编程语言(如 JavaScript、Python、C# 和 Java)。

核心特性

  • 跨浏览器支持:Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox,确保在不同浏览器上的一致性。
  • 跨平台支持:可在 Windows、Linux 和 macOS 等操作系统上运行,支持本地或 CI/CD 环境,可选择无头(headless)或有头(headed)模式。
  • 多语言 API:提供 TypeScript、JavaScript、Python、.NET 和 Java 等多种语言的 API 接口,方便开发者选择熟悉的语言进行开发。
  • 移动 Web 测试:支持 Google Chrome for Android 和 Mobile Safari 的原生移动仿真,可在桌面和云端进行移动 Web 测试。
  • 弹性与无闪烁测试
    • 自动等待:Playwright 会在执行操作前自动等待元素变为可操作状态,避免了因人工超时设置而导致的测试不稳定问题。
    • Web-first 断言:Playwright 的断言专为动态 Web 设计,会自动重试检查直到满足必要条件。
    • 跟踪:可配置测试重试策略,捕获执行跟踪、视频和屏幕截图,以消除闪烁问题。
  • 无限制
    • 多标签页、多源、多用户:支持跨多个标签页、多个源和多个用户的测试场景,可在一次测试中为不同用户创建不同上下文并对其服务器进行测试。
    • 可信事件:模拟真实用户行为,如悬停元素、与动态控件交互,生成可信事件。
    • 穿透 Shadow DOM:Playwright 选择器可以穿透 Shadow DOM 并无缝进入 iframe。
  • 完全隔离与快速执行
    • 浏览器上下文:Playwright 为每个测试创建一个浏览器上下文,相当于一个全新的浏览器配置文件,实现完全的测试隔离,且创建新的浏览器上下文只需几毫秒。
    • 一次登录:可保存上下文的认证状态并在所有测试中重复使用,避免了每个测试中重复的登录操作,同时保持独立测试的完全隔离。
  • 强大的工具
    • Codegen:通过记录用户操作生成测试代码,支持多种语言。
    • Playwright Inspector:用于检查页面、生成选择器、逐步执行测试、查看点击点和探索执行日志。
    • Trace Viewer:捕获所有信息以调查测试失败,包括测试执行屏幕录像、实时 DOM 快照、操作浏览器、测试源等。

工作原理

Playwright 通过与浏览器引擎直接通信来实现自动化,而不是通过 WebDriver 协议。这种直接通信的方式使得 Playwright 能够更快速、更稳定地执行操作,并提供更强大的功能。它在浏览器进程之外运行测试,与现代浏览器架构保持一致,从而避免了传统进程内测试运行器的限制。

在 browser-use 中,Playwright 作为底层浏览器自动化库,负责执行具体的浏览器操作,如导航、点击、输入文本、截图等。LLM 通过 Agent 和 Controller 模块向 Playwright 发送指令,Playwright 则将操作结果返回给 Agent,从而实现 AI 驱动的浏览器自动化。

8. LangChain 框架简介

LangChain 是一个用于开发由大型语言模型(LLM)驱动的应用程序的框架。它旨在简化 LLM 应用程序生命周期的每个阶段,包括开发、生产化和部署。

核心功能

  • 开发:使用 LangChain 的开源组件和第三方集成来构建应用程序。它还支持使用 LangGraph 构建有状态的代理,并提供一流的流式传输和人机协作支持。
  • 生产化:使用 LangSmith 来检查、监控和评估应用程序,以便持续优化和自信地部署。
  • 部署:将 LangGraph 应用程序转换为生产就绪的 API 和助手。

LangChain 为大型语言模型和相关技术(如嵌入模型和向量存储)实现了标准接口,并集成了数百个提供商。

架构

LangChain 框架由多个开源库组成:

  • langchain-core:聊天模型和其他组件的基本抽象。
  • 集成包(例如 langchain-openailangchain-anthropic 等):重要的集成已拆分为由 LangChain 团队和集成开发人员共同维护的轻量级包。
  • langchain:构成应用程序认知架构的链、代理和检索策略。
  • langchain-community:社区维护的第三方集成。
  • langgraph:用于将 LangChain 组件组合成生产就绪应用程序的编排框架,具有持久性、流式传输和其他关键功能。

在 browser-use 中的作用

在 browser-use 中,LangChain 框架主要用于提供 AI 决策能力。它兼容多种 LLM(如 GPT-4、Claude、Deepseek 等),利用模型生成操作指令并处理复杂逻辑。通过 LangChain,browser-use 能够将 LLM 的智能融入到浏览器自动化流程中,使得 AI 代理能够根据当前页面状态和任务目标,智能地决定下一步操作,从而实现更高级别的自动化和智能化。

9. Gradio 简介

Gradio 是一个开源 Python 库,用于快速构建机器学习模型的 Web 界面。它允许开发者轻松地为他们的模型创建交互式演示和应用程序,而无需编写复杂的前端代码。

核心特性

  • 易用性:Gradio 提供了简单的 API,只需几行代码即可为模型创建界面。
  • 多种输入输出类型:支持多种输入和输出类型,如文本、图像、音频、视频、表格、文件等。
  • 可定制性:允许自定义界面的外观和行为,以满足特定需求。
  • 分享与协作:可以轻松地将创建的界面分享给他人,方便协作和演示。
  • 集成性:可以与各种机器学习框架(如 TensorFlow、PyTorch、Scikit-learn 等)和工具(如 Hugging Face Transformers)无缝集成。

在 browser-use 中的作用

在 browser-use 中,Gradio 用于提供一个图形化的 WebUI 界面。通过这个界面,用户可以:

  • 输入任务描述。
  • 实时查看浏览器自动化过程中的交互情况。
  • 查看屏幕录制(如果启用)。
  • 监控任务执行状态。

这使得 browser-use 更加易于使用和调试,特别是对于不熟悉命令行的用户。

10. 总结与展望

browser-use 作为一个集成了大型语言模型、浏览器自动化和用户友好界面的工具,为网页任务的自动化和智能化提供了强大的解决方案。它通过结合 Playwright 的高效浏览器控制能力、LangChain 的 AI 决策能力以及 Gradio 的便捷交互界面,显著降低了复杂网页任务的开发门槛,并为用户提供了直观的操作体验。

随着大型语言模型技术的不断发展和浏览器自动化技术的持续进步,browser-use 有望在更多领域发挥重要作用,例如:

  • 更智能的网页信息提取和整合:能够更准确地理解网页内容,并根据用户需求进行智能化的信息提取和整合。
  • 更复杂的自动化流程:能够处理更复杂、多步骤的自动化任务,例如跨多个网站的预订和购买流程。
  • 更个性化的用户体验:能够根据用户的偏好和习惯,提供更个性化的自动化服务。
  • 与其他 AI 工具的深度集成:能够与其他 AI 工具(如图像识别、语音识别等)进行更深度的集成,实现更丰富的应用场景。

总而言之,browser-use 代表了 AI 技术在浏览器自动化领域的一个重要进展,未来有望在提升工作效率、改善用户体验等方面发挥越来越重要的作用。