跳转到主要内容

浏览器(openclaw 托管)

OpenClaw 可以运行一个由智能体控制的专用 Chrome/Brave/Edge/Chromium 配置文件。 它与你的个人浏览器隔离,通过 Gateway 网关内部的小型本地控制服务进行管理(仅限 loopback)。 It is isolated from your personal browser and is managed through a small local control service inside the Gateway (loopback only). 新手视角:
  • 把它想象成一个独立的、仅供智能体使用的浏览器
  • openclaw 配置文件不会触及你的个人浏览器配置文件。
  • The agent can open tabs, read pages, click, and type in a safe lane.
  • 默认的 chrome 配置文件通过扩展中继使用系统默认的 Chromium 浏览器;切换到 openclaw 可使用隔离的托管浏览器。

What you get

  • 一个名为 openclaw 的独立浏览器配置文件(默认橙色主题)。
  • 确定性标签页控制(列出/打开/聚焦/关闭)。
  • Agent actions (click/type/drag/select), snapshots, screenshots, PDFs.
  • 可选的多配置文件支持(openclawworkremote 等)。
此浏览器不是你的日常浏览器。它是一个安全、隔离的界面,用于智能体自动化和验证。 It is a safe, isolated surface for agent automation and verification.

快速开始

openclaw browser --browser-profile openclaw status
openclaw browser --browser-profile openclaw start
openclaw browser --browser-profile openclaw open https://example.com
openclaw browser --browser-profile openclaw snapshot
如果出现”Browser disabled”,请在配置中启用它(见下文)并重启 Gateway 网关。

配置文件:openclawchrome

  • openclaw:托管的隔离浏览器(无需扩展)。
  • chrome:到你系统浏览器的扩展中继(需要将 OpenClaw 扩展附加到标签页)。
如果你希望默认使用托管模式,请设置 browser.defaultProfile: "openclaw"

配置

浏览器设置位于 ~/.openclaw/openclaw.json
{
  browser: {
    enabled: true, // default: true
    // cdpUrl: "http://127.0.0.1:18792", // legacy single-profile override
    remoteCdpTimeoutMs: 1500, // remote CDP HTTP timeout (ms)
    remoteCdpHandshakeTimeoutMs: 3000, // remote CDP WebSocket handshake timeout (ms)
    defaultProfile: "chrome",
    color: "#FF4500",
    headless: false,
    noSandbox: false,
    attachOnly: false,
    executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
    profiles: {
      openclaw: { cdpPort: 18800, color: "#FF4500" },
      work: { cdpPort: 18801, color: "#0066CC" },
      remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
    },
  },
}
注意事项:
  • 浏览器控制服务绑定到 loopback 上的端口,该端口从 gateway.port 派生(默认:18791,即 gateway + 2)。中继使用下一个端口(18792)。 The relay uses the next port (18792).
  • 如果你覆盖了 Gateway 网关端口(gateway.portOPENCLAW_GATEWAY_PORT),派生的浏览器端口会相应调整以保持在同一”系列”中。
  • 未设置时,cdpUrl 默认为中继端口。
  • remoteCdpTimeoutMs 适用于远程(非 loopback)CDP 可达性检查。
  • remoteCdpHandshakeTimeoutMs 适用于远程 CDP WebSocket 可达性检查。
  • attachOnly: true 表示”永不启动本地浏览器;仅在浏览器已运行时附加”。
  • color + 每个配置文件的 color 为浏览器 UI 着色,以便你能看到哪个配置文件处于活动状态。
  • 默认配置文件是 chrome(扩展中继)。使用 defaultProfile: "openclaw" 来使用托管浏览器。 Use defaultProfile: "openclaw" for the managed browser.
  • 自动检测顺序:如果系统默认浏览器是基于 Chromium 的则使用它;否则 Chrome → Brave → Edge → Chromium → Chrome Canary。
  • 本地 openclaw 配置文件会自动分配 cdpPort/cdpUrl — 仅为远程 CDP 设置这些。

使用 Brave(或其他基于 Chromium 的浏览器)

如果你的系统默认浏览器是基于 Chromium 的(Chrome/Brave/Edge 等),OpenClaw 会自动使用它。设置 browser.executablePath 可覆盖自动检测: Set browser.executablePath to override auto-detection: CLI 示例:
openclaw config set browser.executablePath "/usr/bin/google-chrome"
// macOS
{
  browser: {
    executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"
  }
}

// Windows
{
  browser: {
    executablePath: "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe"
  }
}

// Linux
{
  browser: {
    executablePath: "/usr/bin/brave-browser"
  }
}

本地控制与远程控制

  • 本地控制(默认): Gateway 网关启动 loopback 控制服务,可以启动本地浏览器。
  • 远程控制(节点主机): 在有浏览器的机器上运行节点主机;Gateway 网关将浏览器操作代理到该节点。
  • 远程 CDP: 设置 browser.profiles.<name>.cdpUrl(或 browser.cdpUrl)以附加到远程的基于 Chromium 的浏览器。在这种情况下,OpenClaw 不会启动本地浏览器。 In this case, OpenClaw will not launch a local browser.
远程 CDP URL 可以包含认证信息:
  • 查询令牌(例如 https://provider.example?token=<token>
  • HTTP Basic 认证(例如 https://user:[email protected]
OpenClaw preserves the auth when calling /json/* endpoints and when connecting to the CDP WebSocket. Prefer environment variables or secrets managers for tokens instead of committing them to config files.

节点浏览器代理(零配置默认)

如果你在有浏览器的机器上运行节点主机,OpenClaw 可以自动将浏览器工具调用路由到该节点,无需任何额外的浏览器配置。这是远程 Gateway 网关的默认路径。 This is the default path for remote gateways. 注意事项:
  • 节点主机通过代理命令暴露其本地浏览器控制服务器。
  • 配置文件来自节点自己的 browser.profiles 配置(与本地相同)。
  • 如果不需要可以禁用:
    • 在节点上:nodeHost.browserProxy.enabled=false
    • 在 Gateway 网关上:gateway.nodes.browser.mode="off"

Browserless(托管远程 CDP)

Browserless 是一个托管的 Chromium 服务,通过 HTTPS 暴露 CDP 端点。你可以将 OpenClaw 浏览器配置文件指向 Browserless 区域端点,并使用你的 API 密钥进行认证。 You can point a OpenClaw browser profile at a Browserless region endpoint and authenticate with your API key. 示例:
{
  browser: {
    enabled: true,
    defaultProfile: "browserless",
    remoteCdpTimeoutMs: 2000,
    remoteCdpHandshakeTimeoutMs: 4000,
    profiles: {
      browserless: {
        cdpUrl: "https://production-sfo.browserless.io?token=<BROWSERLESS_API_KEY>",
        color: "#00AA00",
      },
    },
  },
}
注意事项:
  • <BROWSERLESS_API_KEY> 替换为你真实的 Browserless 令牌。
  • 选择与你的 Browserless 账户匹配的区域端点(请参阅其文档)。

安全性

核心理念:
  • 浏览器控制仅限 loopback;访问通过 Gateway 网关的认证或节点配对进行。
  • 如果启用了浏览器控制且未配置任何认证,OpenClaw 会在启动时自动生成 gateway.auth.token 并将其持久化到配置中。
  • 将 Gateway 网关和任何节点主机保持在私有网络上(Tailscale);避免公开暴露。
  • 将远程 CDP URL/令牌视为机密;优先使用环境变量或密钥管理器。
远程 CDP 提示:
  • 尽可能使用 HTTPS 端点和短期令牌。
  • 避免在配置文件中直接嵌入长期令牌。

配置文件(多浏览器)

  1. OpenClaw 支持多个命名配置文件(路由配置)。 9. 配置文件可以是:
  • openclaw 托管:具有独立用户数据目录和 CDP 端口的专用基于 Chromium 的浏览器实例
  • 远程:显式 CDP URL(在其他地方运行的基于 Chromium 的浏览器)
  • 扩展中继:通过本地中继 + Chrome 扩展访问你现有的 Chrome 标签页
默认值:
  • 如果缺少 openclaw 配置文件,会自动创建。
  • chrome 配置文件是内置的,用于 Chrome 扩展中继(默认指向 http://127.0.0.1:18792)。
  • 本地 CDP 端口默认从 18800–18899 分配。
  • 删除配置文件会将其本地数据目录移至回收站。
所有控制端点接受 ?profile=<name>;CLI 使用 --browser-profile

Chrome 扩展中继(使用你现有的 Chrome)

OpenClaw 还可以通过本地 CDP 中继 + Chrome 扩展驱动你现有的 Chrome 标签页(无需单独的”openclaw”Chrome 实例)。 完整指南:Chrome 扩展 流程:
  • Gateway 网关在本地运行(同一台机器)或节点主机在浏览器所在机器上运行。
  • 本地中继服务器在 loopback 的 cdpUrl 上监听(默认:http://127.0.0.1:18792)。
  • 你点击标签页上的 OpenClaw Browser Relay 扩展图标来附加(它不会自动附加)。
  • 智能体通过选择正确的配置文件,使用普通的 browser 工具控制该标签页。
如果 Gateway 网关在其他地方运行,请在浏览器所在机器上运行节点主机,以便 Gateway 网关可以代理浏览器操作。

沙箱会话

  1. 如果代理会话是沙盒化的,browser 工具可能会默认使用 target="sandbox"(沙盒浏览器)。
  2. Chrome 扩展中继接管需要主机浏览器控制,因此需要满足以下之一:
  • 在非沙箱模式下运行会话,或者
  • 设置 agents.defaults.sandbox.browser.allowHostControl: true 并在调用工具时使用 target="host"

设置

  1. 加载扩展(开发/未打包):
openclaw browser extension install
  • Chrome → chrome://extensions → 启用”开发者模式”
  • “加载已解压的扩展程序” → 选择 openclaw browser extension path 打印的目录
  • 固定扩展,然后在你想要控制的标签页上点击它(徽章显示 ON)。
  1. 使用它:
  • CLI:openclaw browser --browser-profile chrome tabs
  • 智能体工具:browser 配合 profile="chrome"
可选:如果你想要不同的名称或中继端口,创建你自己的配置文件:
openclaw browser create-profile \
  --name my-chrome \
  --driver extension \
  --cdp-url http://127.0.0.1:18792 \
  --color "#00AA00"
注意事项:
  • 此模式依赖 Playwright-on-CDP 进行大多数操作(截图/快照/操作)。
  • 再次点击扩展图标可分离。

隔离保证

  • 专用用户数据目录:永不触及你的个人浏览器配置文件。
  • 专用端口:避免使用 9222 以防止与开发工作流冲突。
  • 确定性标签页控制:通过 targetId 定位标签页,而非”最后一个标签页”。

浏览器选择

本地启动时,OpenClaw 选择第一个可用的:
  1. Chrome
  2. Brave
  3. Edge
  4. Chromium
  5. Chrome Canary
你可以使用 browser.executablePath 覆盖。 平台:
  • macOS:检查 /Applications~/Applications
  • Linux:查找 google-chromebravemicrosoft-edgechromium 等。
  • Windows:检查常见安装位置。

控制 API(可选)

仅用于本地集成,Gateway 网关暴露一个小型的 loopback HTTP API:
  • 状态/启动/停止:GET /POST /startPOST /stop
  • 标签页:GET /tabsPOST /tabs/openPOST /tabs/focusDELETE /tabs/:targetId
  • 快照/截图:GET /snapshotPOST /screenshot
  • 操作:POST /navigatePOST /act
  • 钩子:POST /hooks/file-chooserPOST /hooks/dialog
  • 下载:POST /downloadPOST /wait/download
  • 调试:GET /consolePOST /pdf
  • 调试:GET /errorsGET /requestsPOST /trace/startPOST /trace/stopPOST /highlight
  • 网络:POST /response/body
  • 状态:GET /cookiesPOST /cookies/setPOST /cookies/clear
  • 状态:GET /storage/:kindPOST /storage/:kind/setPOST /storage/:kind/clear
  • 设置:POST /set/offlinePOST /set/headersPOST /set/credentialsPOST /set/geolocationPOST /set/mediaPOST /set/timezonePOST /set/localePOST /set/device
所有端点接受 ?profile=<name> 如果已配置 gateway 认证,浏览器 HTTP 路由也需要认证:
  • Authorization: Bearer <gateway token>
  • OpenClaw 在调用 /json/* 端点和连接 CDP WebSocket 时会保留认证信息。建议使用环境变量或密钥管理器存储令牌,而不是将其提交到配置文件中。

Playwright 要求

Some features (navigate/act/AI snapshot/role snapshot, element screenshots, PDF) require Playwright. If Playwright isn’t installed, those endpoints return a clear 501 error. ARIA snapshots and basic screenshots still work for openclaw-managed Chrome. For the Chrome extension relay driver, ARIA snapshots and screenshots require Playwright. 如果你看到 Playwright is not available in this gateway build,请安装完整的 Playwright 包(不是 playwright-core)并重启 Gateway 网关,或者重新安装带浏览器支持的 OpenClaw。

Docker Playwright 安装

如果你的 Gateway 网关在 Docker 中运行,避免使用 npx playwright(npm 覆盖冲突)。改用捆绑的 CLI: 改用捆绑的 CLI:
docker compose run --rm openclaw-cli \
  node /app/node_modules/playwright-core/cli.js install chromium
要持久化浏览器下载,设置 PLAYWRIGHT_BROWSERS_PATH(例如 /home/node/.cache/ms-playwright)并确保 /home/node 通过 OPENCLAW_HOME_VOLUME 或绑定挂载持久化。参见 Docker。 See Docker.

工作原理(内部)

高层流程:
  • 一个小型控制服务器接受 HTTP 请求。
  • 它通过 CDP 连接到基于 Chromium 的浏览器(Chrome/Brave/Edge/Chromium)。
  • 对于高级操作(点击/输入/快照/PDF),它在 CDP 之上使用 Playwright
  • 当缺少 Playwright 时,仅非 Playwright 操作可用。
这种设计使智能体保持在稳定、确定性的接口上,同时让你可以切换本地/远程浏览器和配置文件。

CLI 快速参考

All commands accept --browser-profile <name> to target a specific profile. 所有命令接受 --browser-profile <name> 以定位特定配置文件。 所有命令也接受 --json 以获得机器可读的输出(稳定的负载)。 基础操作:
  • openclaw browser status
  • openclaw browser start
  • openclaw browser stop
  • openclaw browser tabs
  • openclaw browser tab
  • openclaw browser tab new
  • openclaw browser tab select 2
  • openclaw browser tab close 2
  • openclaw browser open https://example.com
  • openclaw browser focus abcd1234
  • openclaw browser close abcd1234
检查:
  • openclaw browser screenshot
  • openclaw browser screenshot --full-page
  • openclaw browser screenshot --ref 12
  • openclaw browser screenshot --ref e12
  • openclaw browser snapshot
  • openclaw browser snapshot --format aria --limit 200
  • openclaw browser snapshot --interactive --compact --depth 6
  • openclaw browser snapshot --efficient
  • openclaw browser snapshot --labels
  • openclaw browser snapshot --selector "#main" --interactive
  • openclaw browser snapshot --frame "iframe#main" --interactive
  • openclaw browser console --level error
  • openclaw browser errors --clear
  • openclaw browser requests --filter api --clear
  • openclaw browser pdf
  • openclaw browser responsebody "**/api" --max-chars 5000
操作:
  • openclaw browser navigate https://example.com
  • openclaw browser resize 1280 720
  • openclaw browser click 12 --double
  • openclaw browser click e12 --double
  • openclaw browser type 23 "hello" --submit
  • openclaw browser press Enter
  • openclaw browser hover 44
  • openclaw browser scrollintoview e12
  • openclaw browser drag 10 11
  • openclaw browser select 9 OptionA OptionB
  • openclaw browser download e12 /tmp/report.pdf
  • openclaw browser waitfordownload /tmp/report.pdf
  • openclaw browser upload /tmp/file.pdf
  • openclaw browser fill --fields '[{"ref":"1","type":"text","value":"Ada"}]'
  • openclaw browser dialog --accept
  • openclaw browser wait --text "Done"
  • openclaw browser wait "#main" --url "**/dash" --load networkidle --fn "window.ready===true"
  • openclaw browser evaluate --fn '(el) => el.textContent' --ref 7
  • openclaw browser highlight e12
  • openclaw browser trace start
  • openclaw browser trace stop
状态:
  • openclaw browser cookies
  • openclaw browser cookies set session abc123 --url "https://example.com"
  • openclaw browser cookies clear
  • openclaw browser storage local get
  • openclaw browser storage local set theme dark
  • openclaw browser storage session clear
  • openclaw browser set offline on
  • openclaw browser set headers --json '{"X-Debug":"1"}'
  • openclaw browser set credentials user pass
  • openclaw browser set credentials --clear
  • openclaw browser set geo 37.7749 -122.4194 --origin "https://example.com"
  • openclaw browser set geo --clear
  • openclaw browser set media dark
  • openclaw browser set timezone America/New_York
  • openclaw browser set locale en-US
  • openclaw browser set device "iPhone 14"
注意事项:
  • uploaddialog预备调用;在触发选择器/对话框的点击/按键之前运行它们。
  • 下载和 trace 输出路径被限制在 OpenClaw 临时根目录下:
    • traces:/tmp/openclaw(回退:${os.tmpdir()}/openclaw
    • downloads:/tmp/openclaw/downloads(回退:${os.tmpdir()}/openclaw/downloads
  • 上传路径被限制在 OpenClaw 临时上传根目录下:
    • OpenClaw 支持多个命名配置文件(路由配置)。配置文件可以是:
  • upload 也可以通过 --input-ref--element 直接设置文件输入。
  • snapshot
    • --format ai(安装 Playwright 时的默认值):返回带有数字 ref 的 AI 快照(aria-ref="<n>")。
    • --format aria:返回无障碍树(无 ref;仅供检查)。
    • --efficient(或 --mode efficient):紧凑角色快照预设(interactive + compact + depth + 较低的 maxChars)。
    • 配置默认值(仅限工具/CLI):设置 browser.snapshotDefaults.mode: "efficient" 以在调用者未传递模式时使用高效快照(参见 Gateway 网关配置)。
    • 角色快照选项(--interactive--compact--depth--selector)强制使用带有 ref=e12 等 ref 的基于角色的快照。
    • --frame "<iframe selector>" 将角色快照范围限定到 iframe(与 e12 等角色 ref 配合使用)。
    • --interactive 输出一个扁平的、易于选择的交互元素列表(最适合驱动操作)。
    • --labels 添加一个带有叠加 ref 标签的视口截图(打印 MEDIA:<path>)。
  • click/type 等需要来自 snapshotref(数字 12 或角色 ref e12)。 操作故意不支持 CSS 选择器。 CSS selectors are intentionally not supported for actions.

快照和 ref

OpenClaw 支持两种”快照”风格:
  • AI 快照(数字 ref)openclaw browser snapshot(默认;--format ai
    • 输出:包含数字 ref 的文本快照。
    • 操作:openclaw browser click 12openclaw browser type 23 "hello"
    • 内部通过 Playwright 的 aria-ref 解析 ref。
  • 角色快照(角色 ref 如 e12openclaw browser snapshot --interactive(或 --compact--depth--selector--frame
    • 输出:带有 [ref=e12](和可选的 [nth=1])的基于角色的列表/树。
    • 操作:openclaw browser click e12openclaw browser highlight e12
    • 内部通过 getByRole(...)(加上重复项的 nth())解析 ref。
    • 添加 --labels 可包含带有叠加 e12 标签的视口截图。
ref 行为:
  • ref 在导航之间不稳定;如果出错,重新运行 snapshot 并使用新的 ref。
  • 如果角色快照是使用 --frame 拍摄的,角色 ref 将限定在该 iframe 内,直到下一次角色快照。

等待增强功能

你可以等待的不仅仅是时间/文本:
  • 等待 URL(Playwright 支持通配符):
    • openclaw browser wait --url "**/dash"
  • 等待加载状态:
    • openclaw browser wait --load networkidle
  • 等待 JS 断言:
    • openclaw browser wait --fn "window.ready===true"
  • 等待选择器变得可见:
    • openclaw browser wait "#main"
这些可以组合使用:
openclaw browser wait "#main" \
  --url "**/dash" \
  --load networkidle \
  --fn "window.ready===true" \
  --timeout-ms 15000

调试工作流

当操作失败时(例如”not visible”、“strict mode violation”、“covered”):
  1. openclaw browser snapshot --interactive
  2. 使用 click <ref> / type <ref>(在交互模式下优先使用角色 ref)
  3. 如果仍然失败:openclaw browser highlight <ref> 查看 Playwright 定位的目标
  4. 如果页面行为异常:
    • openclaw browser errors --clear
    • openclaw browser requests --filter api --clear
  5. 深度调试:录制 trace:
    • openclaw browser trace start
    • 重现问题
    • openclaw browser trace stop(打印 TRACE:<path>

JSON 输出

--json 用于脚本和结构化工具。 示例:
openclaw browser status --json
openclaw browser snapshot --interactive --json
openclaw browser requests --filter api --json
openclaw browser cookies --json
JSON 格式的角色快照包含 refs 加上一个小的 stats 块(lines/chars/refs/interactive),以便工具可以推断负载大小和密度。

状态和环境开关

这些对于”让网站表现得像 X”的工作流很有用:
  • Cookies:cookiescookies setcookies clear
  • 存储:storage local|session get|set|clear
  • 离线:set offline on|off
  • 请求头:set headers --json '{"X-Debug":"1"}'(或 --clear
  • HTTP basic 认证:set credentials user pass(或 --clear
  • 地理位置:set geo <lat> <lon> --origin "https://example.com"(或 --clear
  • 媒体:set media dark|light|no-preference|none
  • 时区/语言环境:set timezone ...set locale ...
  • 设备/视口:
    • set device "iPhone 14"(Playwright 设备预设)
    • set viewport 1280 720

安全与隐私

  • openclaw 浏览器配置文件可能包含已登录的会话;请将其视为敏感信息。
  • browser act kind=evaluate / openclaw browser evaluatewait --fn 在页面上下文中执行任意 JavaScript。提示注入可能会操纵它。如果不需要,请使用 browser.evaluateEnabled=false 禁用它。 Prompt injection can steer this. Disable it with browser.evaluateEnabled=false if you do not need it.
  • 有关登录和反机器人注意事项(X/Twitter 等),请参阅 浏览器登录 + X/Twitter 发帖
  • 保持 Gateway 网关/节点主机私有(仅限 loopback 或 tailnet)。
  • 远程 CDP 端点功能强大;请通过隧道保护它们。

故障排除

有关 Linux 特定问题(特别是 snap Chromium),请参阅浏览器故障排除

智能体工具 + 控制工作原理

智能体获得一个工具用于浏览器自动化:
  • browser — status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
映射方式:
  • browser snapshot 返回稳定的 UI 树(AI 或 ARIA)。
  • browser act 使用快照 ref ID 来点击/输入/拖动/选择。
  • browser screenshot 捕获像素(整页或元素)。
  • browser 接受:
    • profile 来选择命名的浏览器配置文件(openclaw、chrome 或远程 CDP)。
    • targetsandbox | host | node)来选择浏览器所在位置。
    • 在沙箱会话中,target: "host" 需要 agents.defaults.sandbox.browser.allowHostControl=true
    • 如果省略 target:沙箱会话默认为 sandbox,非沙箱会话默认为 host
    • 如果连接了具有浏览器能力的节点,工具可能会自动路由到该节点,除非你指定 target="host"target="node"
This keeps the agent deterministic and avoids brittle selectors.