
人工智能AI Agent浏览器控制GUI 自动化MCP 服务【免费下载链接】browser-useAgents that use the browser.项目地址https://gitcode.com/GitHub_Trending/br/browser-use点击查看免费下载导读本文基于开源仓库browser-use的 CLAUDE.md 开发指南展开系统讲解这一异步 AI 浏览器驱动库的整体架构Agent 如何编排任务、BrowserSession 如何通过事件总线协调各类 Watchdog、DOM 服务如何为 LLM 生成可理解的页面快照以及 Tools 注册表如何把模型决策映射为真实浏览器操作。同时完整覆盖仓库的开发命令、代码风格、CDP-Use 封装方式、测试规范与 MCP 集成方式帮助读者既能在源码级理解其事件驱动设计也能直接上手贡献代码或二次开发。项目定位与运行环境Browser-Use 是一个异步 Python 3.11库核心能力是用 LLM CDPChrome DevTools Protocol实现 AI 浏览器驱动。它的工作方式不是模拟鼠标键盘做脚本化录制而是读取页面 HTML/DOM 结构 → 交给 LLM 推理 → 由 LLM 决定下一步动作 → 通过 CDP 执行点击、输入、滚动等操作 → 循环直至任务完成。从 pyproject.toml 可以看到其运行前提与依赖特征语言要求requires-python 3.11,4.0依赖管理统一使用uv而非 pip关键依赖包括bubus事件总线、cdp-use类型化 CDP 封装、pydanticv2 数据模型、httpx/aiohttp异步 HTTP以及多家 LLM 的官方 SDKopenai、anthropic、groq、ollama、google-genai等通过project.scripts注册了browser-use、browseruse、bu、browser四个 CLI 入口全部指向browser_use.cli:main。高层架构事件驱动 职责分离根据 CLAUDE.md 的High-Level Architecture章节库采用事件驱动架构核心组件包括四个service.py文件对应仓库中统一的 Service Pattern组件源码位置职责Agentbrowser_use/agent/service.py主编排器接收任务、管理浏览器会话、执行 LLM 驱动的动作循环BrowserSessionbrowser_use/browser/session.py管理浏览器生命周期、CDP 连接通过事件总线协调多个 Watchdog 服务Toolsbrowser_use/tools/service.py动作注册表把 LLM 决策映射为浏览器操作click、type、scroll 等DomServicebrowser_use/dom/service.py提取与处理 DOM 内容负责元素高亮与可访问性树生成AgentLLM 驱动的主循环Agent 是整个系统的大脑调度层。从 browser_use/agent/service.py 的导入关系可以看出它的编排对象通过MessageManagerbrowser_use/agent/message_manager/service.py维护与 LLM 的多轮对话历史并支持消息压缩compacted_memory前缀机制避免长任务中上下文爆炸通过Tools注册表browser_use/tools/service.py拿到当前可执行的动作集合动作模型如ClickElementAction、NavigateAction、InputTextAction、ScrollAction、DoneAction等定义在 browser_use/tools/views.py使用SystemPromptbrowser_use/agent/prompts.py加载系统提示词实际提示词文本存放在 browser_use/agent/system_prompts/ 下的多个.md文件中通过BrowserSession与浏览器交互动作最终转化为浏览器事件如ClickElementEvent、NavigateToUrlEvent由 BrowserSession 消费执行。BrowserSession双层架构与事件总线BrowserSession 的类注释明确描述了两层架构高层事件处理层面向 Agent 和 Tools接收高层语义事件导航、点击、滚动、下载等底层 CDP/Playwright 调用层直接执行浏览器操作。它同时支持事件驱动和命令式两种调用风格# 直接传参推荐大多数用户使用 session BrowserSession(headlessTrue, user_data_dir./profile) # 或者使用 BrowserProfile高级用法 session BrowserSession(browser_profileBrowserProfile(...)) # 会话字段可直接访问浏览器设置通过 profile 或属性获取 print(session.id)BrowserSession 还内置了ResilientEventBus——继承自bubus.EventBus的事件总线实现其step()/wait_until_idle()在总线被销毁后不再断言而是静默返回以保证keep_alive会话例如 Lambda 冷启动恢复场景的健壮性。事件驱动的 Watchdog 体系CLAUDE.md 明确指出 BrowserSession 通过bubus事件总线协调多个 Watchdog 服务。各 Watchdog 位于 browser_use/browser/watchdogs/ 目录其职责如下DownloadsWatchdogdownloads_watchdog.py处理 PDF 自动下载与文件管理通过DownloadWillBeginEvent、DownloadProgressEvent等 CDP 事件跟踪下载进度并内置了网络层可下载文件扩展名集合pdf/doc/docx/xls/zip 等PopupsWatchdog管理 JavaScript 对话框与弹窗SecurityWatchdog执行域名限制与安全策略与allowed_domains/prohibited_domains配置联动DOMWatchdog处理 DOM 快照、截图与元素高亮AboutBlankWatchdog处理空页面about:blank重定向。从 browser_use/browser/session.py 的初始化代码可以看到这些 Watchdog 都以event_busself.event_bus, browser_sessionself的方式注册到同一事件总线上形成浏览器会话 → 事件总线 → 多个独立服务的松散耦合结构。这一设计同样体现在 CLAUDE.md 的架构原则中做大规模重构时倾向使用简单事件总线和任务队列把系统拆解为各自管理一部分独立状态的小型服务。DomService为 LLM 准备页面快照DomService 负责把原始 DOM 转化为 LLM 可以消费的结构化信息。从 browser_use/dom/service.py 可以看到它依赖三个关键序列化组件ClickableElementDetectorbrowser_use/dom/serializer/clickable_elements.py识别可点击元素DOMTreeSerializerbrowser_use/dom/serializer/serializer.pyDOM 树序列化build_snapshot_lookupbrowser_use/dom/enhanced_snapshot.py构建增强快照查找表配合REQUIRED_COMPUTED_STYLES计算样式需求。DOM 快照、可访问性树、元素高亮以及 iframe 处理max_iframes、max_iframe_depth可配置跨域 iframe 需满足至少 10px 尺寸才会被纳入都在这里完成其输出是 Agent 每步推理的观察依据。CDP 集成基于 cdp-use 的类型化协议访问CLAUDE.md 用专门的章节说明 CDP 集成方式。库使用 cdp-use一个第三方开源库提供类型化的 CDP 协议访问但所有 CDP 客户端与会话管理、其他 CDP 辅助逻辑仍保留在 browser_use/browser/session.py 中。使用风格如下均通过cdp_client.send调用# 启用某域的 CDP 方法 cdp_client.send.DOMSnapshot.enable(session_idsession_id) # 用字典传参 cdp_client.send.Target.attachToTarget(params{targetId: target_id, flatten: True}) # 更推荐用类型化参数类传参 from cdp_use.cdp.target import ActivateTargetParameters cdp_client.send.Target.attachToTarget( paramsActivateTargetParameters(targetIdtarget_id, flattenTrue) )事件注册必须使用cdp_client.register而不是cdp_client.on(...)后者在 cdp-use 中不存在cdp_client.register.Browser.downloadWillBegin(callback_func_here)此外仓库对 CDP 超时做了封装TimeoutWrappedCDPClientbrowser_use/browser/_cdp_timeout.py用于给 CDP 调用设置超时保护避免个别 CDP 命令长时间挂起阻塞 Agent 循环。浏览器配置BrowserProfileCLAUDE.md 的Browser Configuration章节指出browser_use/browser/profile.py 包含所有浏览器启动参数、显示配置与扩展管理逻辑。关键机制与常量包括显示尺寸自动检测通过detect_display_configuration()profile.py完成——macOS 使用AppKit.NSScreenLinux/Windows 使用screeninfo的get_monitors()扩展管理uBlock Origin、cookie 处理类扩展支持白名单配置可通过环境变量BROWSER_USE_DISABLE_EXTENSIONS关闭默认扩展Chrome 启动参数生成与去重预定义了多组参数常量包括CHROME_DEFAULT_ARGS关闭后台节流、禁用弹窗拦截、--disable-back-forward-cache等、CHROME_HEADLESS_ARGS--headlessnew、CHROME_DOCKER_ARGS--no-sandbox、--disable-dev-shm-usage等容器必需项、CHROME_DISABLE_SECURITY_ARGS与CHROME_DETERMINISTIC_RENDERING_ARGS代理、安全设置与 headless/headful 模式headless 默认值由BROWSER_USE_HEADLESS环境变量控制未设置时回退到显示环境探测调试端口固定为 9242避免与常见的 9222 冲突同时提供云端浏览器模式的参数入口cloud_profile_id、cloud_proxy_country_code等见 browser_use/browser/session.py 的__init__overload 定义本地与云端两种模式共用同一批公共参数allowed_domains、headless、auto_download_pdfs、highlight_elements等。开发环境搭建与常用命令CLAUDE.md 给出了完整的开发命令矩阵全部基于uv环境搭建uv venv --python 3.11 source .venv/bin/activate uv sync测试# 运行 CI 测试默认测试集 uv run pytest -vxs tests/ci # 运行全部测试 uv run pytest -vxs tests/ # 运行单个测试 uv run pytest -vxs tests/ci/test_specific_test.py质量检查# 类型检查 uv run pyright # Lint 自动修复 格式化 uv run ruff check --fix uv run ruff format # pre-commit 钩子提交前运行 uv run pre-commit run --all-files从 pyproject.toml 的[tool.pytest.ini_options]可以看到 CI 侧的具体约束timeout 300、asyncio_mode auto无需pytest.mark.asyncio装饰器、testpaths [tests]且默认追加-svx --strict-markers --tbshort --distloadscope参数。Ruff 配置采用 tab 缩进、单引号、行长 130Pyright 使用basic类型检查模式。MCP Server 模式库可以作为 MCP Server 运行供 Claude Desktop 等 MCP 客户端集成uvx browser-use[cli] --mcp从 browser_use/cli.py 的源码看--mcp标志会启动 stdio 模式的 MCP Server_run_mcp_stdio_server(browser_use.mcp.server)另有--cli-mcp对应 browser_use/mcp/cli_mcp.py。代码风格与工程规范CLAUDE.md 对代码风格提出了明确且可执行的要求这些规范直接影响所有贡献者提交的代码使用异步 PythonPython 代码一律使用tab 缩进不用空格采用现代类型标注风格Python 3.12用str | None替代Optional[str]用list[str]替代List[str]用dict[str, Any]替代Dict[str, Any]日志逻辑隔离所有控制台日志逻辑放在以_log_...为前缀的独立方法中例如def _log_pretty_path(path: Path) - str避免污染主逻辑数据模型内部数据与可能作为 dict 出现的用户面 API 参数一律用pydantic v2 模型表示模型配置使用model_config ConfigDict(extraforbid, validate_by_nameTrue, validate_by_aliasTrue, ...)按场景调参且优先用Annotated[..., AfterValidator(...)]内联校验逻辑而不是在模型上写辅助方法文件组织每个子组件的主逻辑放在service.py大部分 pydantic 模型放在views.py除非足够长值得独立成文件运行时断言在函数开头与结尾使用运行时断言强制约束与假设ID 字段新 ID 字段优先使用from uuid_extensions import uuid7strid: str Field(default_factoryuuid7str)测试与类型检查开发中随时运行uv run pytest -vxs tests/ci与uv run pyright。文件组织关键模式模式位置约定说明Service Patternservice.py每个大组件的主逻辑Agent、BrowserSession、DomService、ToolsViews Patternviews.pypydantic 模型与数据结构Eventsevents.py事件定义配合事件驱动架构Browser Profilebrowser_use/browser/profile.py浏览器启动参数、显示配置、扩展管理System Promptsbrowser_use/agent/system_prompts/Agent 提示词 markdown 文件system_prompt*.md测试规范真实对象优先绝不 MockCLAUDE.md 对测试提出了非常具体且严格的要求这也是仓库质量的核心保障绝不 mock 任何东西始终使用真实对象唯一例外是 LLM——可以使用conftest.py中的 pytest fixtures 与工具预设 LLM 响应见 tests/conftest.py测试中绝不使用真实远程 URL如https://google.com或https://example.com改用pytest-httpserver在 fixture 中起本地测试服务器返回测试所需的 HTML可参考 tests/ci 下的现有用例采用pytest-asyncio 现代写法异步测试直接用普通async def函数不再需要pytest.mark.asyncio装饰器需要事件循环时在测试内部使用loop asyncio.get_event_loop()不要通过函数参数传event_loopfixture包括异步 fixture只需简单的pytest.fixture装饰器且不带参数测试文件的归位规则测试通过后移入tests/ci/子目录该目录是默认测试集每次提交由 CI 自动发现并运行事件相关的测试放在tests/ci/test_action_EventNameHere.py中。作为配套策略CLAUDE.md 的Strategy For Making Changes章节要求任何重要改动都按如下顺序进行先写/找到验证现有设计的测试并确认其通过 → 为新设计先写失败测试并确认它们失败 → 实现新设计 → 跑完整tests/ci套件确认新设计与向后兼容性 → 合并去重测试逻辑 → 同步更新docs/与examples/。MCPModel Context Protocol双向集成CLAUDE.md 指出库支持两种 MCP 模式作为 MCP Server把浏览器自动化工具暴露给 MCP 客户端如 Claude Desktop即上文browser-use --mcp命令作为 MCP 客户端Agent 可以连接外部 MCP Serverfilesystem、GitHub 等来扩展能力。第二种模式的连接管理位于 browser_use/mcp/client.py。其核心类MCPClient会把外部 MCP Server 的工具动态发现并注册为 browser-use 的动作from browser_use import Tools from browser_use.mcp.client import MCPClient tools Tools() # 连接外部 MCP Server mcp_client MCPClient( server_namemy-server, commandnpx, args[mycompany/mcp-serverlatest], ) # 把所有 MCP 工具注册为 browser-use 动作 await mcp_client.register_to_tools(tools) # 之后正常使用 AgentMCP 工具会作为动作自动可用这种双向能力使 browser-use 既能被调用作为工具服务器也能调用别人作为工具客户端适合构建复杂的多服务 Agent 生态。开发约束清单CLAUDE.md 最后给出了开发时必须遵守的约束可视为贡献者的红线依赖管理一律使用uv不用pip不要随手创建示例文件——实现功能时如需验证直接在终端内联测试使用真实模型名——不要把gpt-4o替换成gpt-4它们是不同模型避免误导动作用描述性名称与 docstring返回带结构化内容的ActionResult帮助 Agent 更好地推理提交 PR 前运行 pre-commit 钩子。小结从 CLAUDE.md 这份开发指南可以完整还原 browser-use 的设计哲学事件驱动 服务化拆分——Agent 负责 LLM 推理编排BrowserSession 借助bubus事件总线把浏览器生命周期拆给一组 WatchdogDomService 负责把页面翻译成模型可理解的快照Tools 注册表充当动作映射层而 CDP 细节则交由 cdp-use 的类型化封装与 browser_use/browser/session.py 统一管理。配合严格的测试规范真实对象、本地测试服务器、事件归位测试文件与统一的service.py/views.py文件模式这一架构既保证了各子系统的独立可维护性也为 Agent 在多轮浏览器交互中的稳定性提供了保障。对于希望理解其源码或参与贡献的开发者上述命令、代码风格与测试流程构成了完整的上手路径。赞分享人工智能AI Agent浏览器控制GUI 自动化MCP 服务【免费下载链接】browser-useAgents that use the browser.项目地址https://gitcode.com/GitHub_Trending/br/browser-use点击查看免费下载相关推荐Audacity免费音频编辑软件从零开始制作专业音频的完整指南Audacity免费音频编辑软件从零开始制作专业音频的完整指南 你是否曾经想要编辑音频却不知道从何开始或者正在寻找一款功能强大又完全免费的音频编辑工具今天音频处理桌面应用音视频Midway 仓库 Agent 协作指南OpenSpec 规格驱动开发与 Monorepo 工程规范Midway 仓库 Agent 协作指南OpenSpec 规格驱动开发与 Monorepo 工程规范 导读 本指南面向在 Midway 开源仓库中工作的 AI后端微服务云原生响应式数据库工具开发新范式MCP Toolbox事件驱动架构详解响应式数据库工具开发新范式MCP Toolbox事件驱动架构详解 MCP Toolbox for Databases 是一款开源的数据库MCP服务器专为企业MCP 服务数据库后端AI 应用上一篇Docker镜像仓库管理Universe环境版本控制实践下一篇CMake与Java集成详解JNI项目的编译配置与测试策略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考