浏览器代理服务

OpenBrowser是为AI代理提供的浏览器基础设施,支持真实Chrome会话、持久化配置、远程API和多人协作工具,适用于自动化浏览器操作和多人协作场景。

  • by buildingopen
  • Python
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 buildingopen/openbrowser

使用说明

打开浏览器

OpenBrowser是人工智能代理的浏览器基础设施:真实的Chrome会话、持久配置文件、人工登录切换、远程API和MCP工具。

它允许Claude、Codex、Cursor、浏览器使用、OpenBrowser风格的代理和自定义工作人员共享真实的浏览器,而无需争夺一个CDP端口。代理租用浏览器,在需要帐户状态时使用命名配置文件,向人类手动登录挑战,并留下遥测和问题报告,这些报告可以稍后审核。当帐户需要一致的路由时,标识还可以锁定代理、区域设置和时区设置。

flowchart LR
  Agent["Agent\nClaude / Codex / Cursor / worker"] --> Client["MCP or API client"]
  Client --> Broker["OpenBrowser Broker"]
  Broker --> Lease["Lease manager"]
  Broker --> Profiles["Profile + identity manager"]
  Broker --> Proxy["Proxy router"]
  Broker --> Observability["Telemetry + feedback + audit"]
  Lease --> Pool["Chrome pool"]
  Profiles --> Pool
  Proxy --> Pool
  Pool --> Slots["pool-a ... pool-h\nisolated CDP sessions"]

为什么

大多数浏览器代理都以相同的方式崩溃:

  • 多个代理连接到同一个Chrome实例并相互阻止
  • 登录会话绑定到一个脆弱的浏览器配置文件
  • 密码和2FA提示成为不安全的聊天消息
  • Slack、Discord、Notion、Linear和X等富文本应用程序会忽略DOM填充调用
  • 失败会消失在日志中,因此下一个代理会重复同样的错误

OpenBrowser为代理提供了一个操作合同:租赁、代理、发布、报告。

特性

  • 浏览器池:多个隔离的Chrome插槽,CDP端点由一个代理管理。
  • 持久配置文件:命名身份重用Chrome配置文件目录和会话Cookie。
  • 配置文件副本:所选身份可以并行运行,而不会发生Chrome配置文件锁定冲突。
  • 快速QA路由:将OpenBrowser与一次性浏览器工具配对,用于不需要帐户状态的公共页面检查。
  • 代理路由:标识可以通过以下方式将流量固定到HTTP/SOCKS代理 proxy_ref.
  • 远程应用程序接口:不记名令牌受保护 /openbrowser/v1 API适用于任何机器上的代理。
  • MCP服务器:本地MCP用于相同的主机代理,远程MCP用于HTTPS支持的访问。
  • 人工身份切换:登录、2FA、密钥和手动挑战的一次性门户链接。
  • 主动租赁控制:代理已持有的浏览器选项卡的短期手动控制链接。
  • 富文本键盘工具:用于拒绝简单DOM值更改的编辑器的真实键盘事件。
  • 遥测和问题:经过净化的事件、反馈问题跟踪和使用审计。
  • 刀具模式适配器: openbrowser-use 包括用于打开、状态、截图、点击、键入、按键、等待和选项卡的内置代理命令;可选的直通可以调用外部CLI。

用例

用例 OpenBrowser为您提供
远程浏览器自动化 HTTPS API和用于在其他机器上运行的代理的远程MCP。
已登录的工作流 具有持久配置文件状态的命名Chrome标识。
多代理工作 租用隔离,这样并行代理就不会窃取彼此的标签。
特定于帐户的路由 每个身份的代理引用、区域设置、时区和配置文件策略。
人在环身份验证 密码、2FA、密钥和手动检查的一次性门户链接。
可调试自动化 山宁泰遥测、本地反馈问题和会话日志审计。

建筑

sequenceDiagram
  participant A as Agent
  participant B as OpenBrowser Broker
  participant C as Chrome slot
  participant H as Human auth portal
  A->>B: lease(owner, identity_id?)
  B->>C: reserve isolated Chrome session
  B-->>A: lease_id
  A->>B: navigate / click / type / screenshot
  B->>C: browser action over CDP
  C-->>B: page state
  B-->>A: snapshot or result
  alt login or challenge required
    A->>B: auth_request or lease_control_request
    B-->>H: one-time portal URL
    H->>C: human completes login
  end
  A->>B: release(lease_id)
  B->>B: telemetry + feedback + audit trail

快速开始

python

git clone https://github.com/floomhq/openbrowser.git
cd openbrowser
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
playwright install chromium
cp .env.example .env
cp config/identities.example.json config/identities.local.json

启动代理:

openbrowser-broker

对于同一主机上的第二个实例,隔离浏览器插槽端口:

OPENBROWSER_BROKER_PORT=8876 \
OPENBROWSER_SLOT_PORT_START=19223 \
OPENBROWSER_BROKER_ROOT=/tmp/openbrowser-demo/root \
OPENBROWSER_BROWSER_POOL_DIR=/tmp/openbrowser-demo/pool \
openbrowser-broker

代理将其Chrome池启动器脚本安装到 OPENBROWSER_BROWSER_POOL_DIR/bin 在启动时,当第一个租约到达时,懒洋洋地启动一个中立的Chrome插槽。

码头工人

git clone https://github.com/floomhq/openbrowser.git
cd openbrowser
OPENBROWSER_API_KEYS="$(openssl rand -base64 48)" docker compose up --build

租用浏览器:

curl -fsS http://127.0.0.1:8767/lease \
  -H "content-type: application/json" \
  -d '{"owner":"demo","ttl_seconds":300}'

使用返回的 lease_id:

curl -fsS http://127.0.0.1:8767/browser/navigate \
  -H "content-type: application/json" \
  -d '{"lease_id":"<lease_id>","url":"https://example.com"}'

curl -fsS http://127.0.0.1:8767/browser/snapshot \
  -H "content-type: application/json" \
  -d '{"lease_id":"<lease_id>"}'

curl -fsS -X POST http://127.0.0.1:8767/release/<lease_id>

远程应用程序接口

暴露HTTPS代理或隧道后面的代理,并配置:

OPENBROWSER_API_KEYS="your-long-random-api-key"
OPENBROWSER_PUBLIC_OPENBROWSER_BASE_URL="https://browser.example.com/openbrowser/v1"

然后拨打:

BASE=https://browser.example.com/openbrowser/v1
KEY=your-long-random-api-key

curl -fsS "$BASE/docs" \
  -H "authorization: Bearer $KEY" \
  -H "user-agent: openbrowser-client/1.0"

API涵盖租赁、导航、快照、屏幕截图、点击、打字、键盘事件、选项卡、授权切换、租赁控制、配置文件、反馈问题、遥测和审计。

flowchart TD
  RemoteAgent["Remote agent"] -->|Bearer token| API["/openbrowser/v1"]
  API --> Lease["POST /leases"]
  API --> Browser["POST /browser/*"]
  API --> Auth["POST /auth/request"]
  API --> Issues["POST /feedback/issues"]
  API --> Audit["GET /audit"]

主控程序

本地MCP,用于在代理主机上运行的代理:

{
  "mcpServers": {
    "openbrowser-broker": {
      "command": "openbrowser-mcp"
    }
  }
}

远程MCP,适用于在任何地方运行的代理:

{
  "mcpServers": {
    "openbrowser-remote": {
      "command": "openbrowser-remote-mcp",
      "env": {
        "OPENBROWSER_API_KEY": "<OPENBROWSER_API_KEY>",
        "OPENBROWSER_BASE_URL": "https://browser.example.com/openbrowser/v1"
      }
    }
  }
}

核心MCP工具:

  • browser_lease, browser_release, browser_heartbeat
  • browser_navigate, browser_snapshot, browser_screenshot
  • browser_click, browser_type, browser_keyboard_type, browser_keyboard_press
  • browser_tabs, browser_new_tab, browser_switch_tab, browser_wait
  • auth_request, auth_status, lease_control_request
  • feedback_report_issue, feedback_list_issues, feedback_update_issue
  • telemetry_record_event, telemetry_list_events, telemetry_summary
  • broker_audit, broker_docs, profile_status

持久配置文件

标识在中配置 config/identities.local.json:

{
  "identities": {
    "work-main": {
      "label": "Work account",
      "site": "example.com",
      "slot": "auto",
      "profile_dir": "/var/lib/openbrowser-broker/profiles/work-main",
      "proxy_ref": "residential:work-main",
      "timezone": "America/New_York",
      "lang": "en-US",
      "policy": {
        "max_parallel_sessions": 1,
        "requires_human_auth": true
      }
    }
  }
}

当身份需要登录时:

curl -fsS "$BASE/auth/request" \
  -H "authorization: Bearer $KEY" \
  -H "content-type: application/json" \
  -d '{"owner":"setup","identity_id":"work-main","url":"https://example.com/login","reason":"initial_login"}'

打开返回的 portal_url,在浏览器视图中完成登录,然后将请求标记为完成。该身份的未来租约将重用已保存的配置文件状态。

对于并行工作,设置 policy.max_parallel_sessions 上方 1.OpenBrowser然后为每个插槽的副本播种,而不是对一个配置文件目录启动多个Chrome进程。这很重要:桌面Chrome配置文件中的几个窗口是一个Chrome进程,但几个AX41代理是独立的Chrome进程。直接共享相同内容 profile_dir 在这些进程中,Chrome单例锁失败和配置文件数据库损坏的风险。

flowchart LR
  Identity["identity_id=work-main"] --> Profile["Chrome profile dir"]
  Identity --> Policy["parallel-session policy"]
  Identity --> ProxyRef["optional proxy_ref"]
  ProxyRef --> Forwarder["local proxy forwarder"]
  Profile --> Chrome["leased Chrome slot"]
  Forwarder --> Chrome

代理路由

在中添加代理凭据 secrets/proxies.json:

{
  "proxies": {
    "residential:work-main": {
      "scheme": "http",
      "host": "proxy.example.net",
      "port": 12345,
      "username": "user",
      "password": "pass"
    }
  }
}

然后设置 "proxy_ref": "residential:work-main" 关于身份。代理启动本地代理转发器,并使用该配置文件的匹配代理启动Chrome。

安全模型

  • 工具永远不会返回原始Cookie、密码、令牌、代理凭据和VNC密码。
  • 遥测技术会编辑敏感密钥和秘密形状的字符串。
  • 浏览器键入遥测存储的是文本长度,而不是键入的文本。
  • 登录和挑战处理使用人工切换门户,而不是聊天中的秘密。
  • 验证码解决和禁令规避自动化不在项目范围内。

这不是什么

  • 不是验证码求解器。
  • 不是令牌提取器。
  • 不是每个代理都有一个共享的全局Chrome选项卡。
  • 不是一个抓取旁路工具包。
  • 当存在稳定的API时,不能替代产品API。

运营

openbrowser-audit --json
openbrowser-adapter status
openbrowser-use --json open https://example.com
openbrowser-use --json state

openbrowser-adapter status 和共同 openbrowser-use 工具命令内置于此包中。不支持 openbrowser-use 命令可以传递到外部 browser-use 安装CLI时。可以使用与OpenBrowser兼容的直通运行 OPENBROWSER_CLI;它们是可选的兼容性挂钩,不是核心安装路径的一部分。

系统化示例 systemd/详细的运行手册在 docs/.

品牌和产品规格

真理的产品和视觉来源存在于 docs/brand/该仓库包含OpenBrowser徽标、favicon、引用英雄和JSON令牌 docs/assets/brand/,加上下的包服务运行时资产 ax_browser_broker/static/brand/.

发展

python3 -m compileall ax_browser_broker tests
pytest -q

项目状态

OpenBrowser是面向生产的浏览器基础架构的alpha公开版本。测试涵盖了核心租赁管理器、配置文件标识、远程API、MCP表面、人工授权切换、遥测、反馈问题、审计和适配器包装器。新的部署可以使用上述通用命令和环境变量;遗产 ax-* 命令包装器仍用于现有安装。

许可证

麻省理工学院