跳转到内容

API浏览器控制 API

如需进行设置、配置和故障排除,请参阅 Browser。 本页面是本地控制 HTTP API、openclaw browser CLI 以及脚本模式(快照、引用、等待、调试流程)的参考文档。

仅适用于本地集成,Gateway(网关) 公开了一个小型回环 HTTP API:

  • 状态/启动/停止:GET /POST /startPOST /stop
  • 标签页:GET /tabs, POST /tabs/open, POST /tabs/focus, DELETE /tabs/:targetId
  • 快照/截图:GET /snapshot, POST /screenshot
  • 操作:POST /navigate, POST /act
  • 钩子:POST /hooks/file-chooser, POST /hooks/dialog
  • 下载:POST /downloadPOST /wait/download
  • 权限:POST /permissions/grant
  • 调试: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>POST /start?headless=trueOpenClaw 请求针对本地托管配置文件的一次性无头启动,而不更改持久化的浏览器配置;仅附加、远程 CDP 和现有会话配置文件会拒绝该覆盖,因为 OpenClaw 不会启动这些浏览器进程。

如果配置了共享密钥网关身份验证,浏览器 HTTP 路由也需要身份验证:

  • Authorization: Bearer <gateway token>
  • x-openclaw-password: <gateway password> 或使用该密码进行 HTTP Basic 认证

注意:

  • 此独立回环浏览器 API 使用受信任代理或 Tailscale Serve 身份标头。
  • 如果 gateway.auth.modenonetrusted-proxy,这些回环浏览器路由不会继承那些承载身份的模式;请将它们保持为仅限回环访问。

POST /act 针对路由级验证和策略失败使用结构化错误响应:

{ "error": "<message>", "code": "ACT_*" }

当前 code 值:

  • ACT_KIND_REQUIRED (HTTP 400):kind 缺失或无法识别。
  • ACT_INVALID_REQUEST (HTTP 400):操作负载未能通过规范化或验证。
  • ACT_SELECTOR_UNSUPPORTED (HTTP 400):selector 与不支持的操作类型一起使用。
  • ACT_EVALUATE_DISABLED (HTTP 403):evaluate(或 wait --fn)被配置禁用。
  • ACT_TARGET_ID_MISMATCH (HTTP 403):顶级或批处理的 targetId 与请求目标冲突。
  • ACT_EXISTING_SESSION_UNSUPPORTED (HTTP 501):该操作不支持现有会话配置文件。

其他运行时故障仍可能返回 { "error": "<message>" } 而不带 code 字段。

某些功能(导航/操作/AI 快照/角色快照、元素截图、 PDF)需要 Playwright。如果未安装 Playwright,这些端点将返回 清晰的 501 错误。

在没有 Playwright 的情况下仍然有效的功能:

  • ARIA 快照
  • 当存在每个标签页的 CDP WebSocket 时,提供基于角色的可访问性快照(--interactive--compact--depth--efficient)。这是用于检查和 ref 发现的回退方案;Playwright 仍然是主要的 操作引擎。
  • 当存在逐标签页 CDP WebSocket 时,托管 openclaw 浏览器的页面截图
  • existing-session / Chrome MCP 配置文件的页面截图
  • 来自快照输出的 existing-session 基于引用的截图 (--ref)

仍然需要 Playwright 的部分:

  • navigate
  • act
  • 依赖 Playwright 原生 AI 快照格式的 AI 快照
  • CSS 选择器元素截图 (--element)
  • 完整浏览器 PDF 导出

元素屏幕截图也会拒绝 --full-page;路由返回 fullPage is not supported for element screenshots

如果看到 Playwright is not available in this gateway build,说明打包的 Gateway(网关) 缺少核心浏览器运行时依赖。请重新安装或更新 OpenClaw,然后重启网关。对于 Docker,还请按照下文所示安装 Chromium 浏览器二进制文件。

如果您的 Gateway(网关) 在 Docker 中运行,请避免 Gateway(网关)Dockernpx playwrightnpm(npm 覆盖冲突)。 对于自定义镜像,请将 Chromium 预构建到镜像中:

Terminal window
OPENCLAW_INSTALL_BROWSER=1 ./scripts/docker/setup.sh

对于现有镜像,改为通过随附的 CLI 安装:

Terminal window
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 或绑定挂载进行持久化。OpenClaw 会自动检测 Linux 上已持久化的 Chromium。请参阅 Docker

一个小型回环控制服务器接受 HTTP 请求,并通过 CDP 连接到基于 Chromium 的浏览器。高级操作(点击/输入/快照/PDF)通过 CDP 之上的 Playwright 进行;当 Playwright 缺失时,仅支持非 Playwright 操作。在底层本地/远程浏览器和配置文件自由切换的同时,代理看到的始终是一个稳定的接口。

所有命令都接受 --browser-profile <name> 以针对特定的配置文件,并接受 --json 以获取机器可读的输出。

基础:状态、标签页、打开/聚焦/关闭
Terminal window
openclaw browser status
openclaw browser start
openclaw browser start --headless # one-shot local managed headless launch
openclaw browser stop # also clears emulation on attach-only/remote CDP
openclaw browser tabs
openclaw browser tab # shortcut for current 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
检查:截图、快照、控制台、错误、请求
Terminal window
openclaw browser screenshot
openclaw browser screenshot --full-page
openclaw browser screenshot --ref 12 # or --ref e12
openclaw browser screenshot --labels
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 --urls
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
操作:navigate、click、type、drag、wait、evaluate
Terminal window
openclaw browser navigate https://example.com
openclaw browser resize 1280 720
openclaw browser click 12 --double # or e12 for role refs
openclaw browser click-coords 120 340 # viewport coordinates
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 report.pdf
openclaw browser waitfordownload report.pdf
openclaw browser upload /tmp/openclaw/uploads/file.pdf
openclaw browser fill --fields '[{"ref":"1","type":"text","value":"Ada"}]'
openclaw browser dialog --accept
openclaw browser dialog --dismiss --dialog-id d1
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 evaluate --timeout-ms 30000 --fn 'async () => { await window.ready; return true; }'
openclaw browser highlight e12
openclaw browser trace start
openclaw browser trace stop
状态:cookies、storage、offline、headers、geo、device
Terminal window
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 --headers-json '{"X-Debug":"1"}'
openclaw browser set credentials user pass # --clear to remove
openclaw browser set geo 37.7749 -122.4194 --origin "https://example.com"
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准备(arming)调用;在触发选择器/对话框的点击/按压操作之前运行它们。如果某个操作打开了模态框,该操作响应将包含 blockedByDialogbrowserState.dialogs.pending;传递该 dialogId 以直接响应。在 OpenClaw 之外处理的对话框将显示在 browserState.dialogs.recent 下。
  • click/type/etc 需要来自 snapshotref(数字 12、角色引用 e12 或可操作的 ARIA 引用 ax12)。出于意图,操作不支持 CSS 选择器。当可见视口位置是唯一可靠的目标时,请使用 click-coords
  • 下载、跟踪和上传路径被限制在 OpenClaw 临时根目录:/tmp/openclaw{,/downloads,/uploads}(回退:${os.tmpdir()}/openclaw/...)。
  • upload 也可以通过 --input-ref--element 直接设置文件输入。

当 OpenClaw 能够证明被替换的标签页(例如相同的 URL,或表单提交后单个旧标签页变为单个新标签页)时,稳定的标签页 ID 和标签可以在 Chromium 原始目标替换中保留下来。原始目标 ID 仍然是不稳定的;在脚本中优先使用 suggestedTargetId 中的 tabs

快照标志概览:

  • --format ai(Playwright 的默认选项):带有数字引用(aria-ref="<n>")的 AI 快照。
  • --format aria:带有 axN 引用的无障碍树。当 Playwright 可用时,OpenClaw 会将带有后端 DOM ID 的引用绑定到活动页面,以便后续操作可以使用它们;否则,将输出视为仅用于检查。
  • --efficient(或 --mode efficient):紧凑型角色快照预设。设置 browser.snapshotDefaults.mode: "efficient" 可将其设为默认值(请参阅 Gateway(网关) configuration)。
  • --interactive--compact--depth--selector 强制生成带有 ref=e12 引用的角色快照。--frame "<iframe>" 将角色快照的范围限定在 iframe 内。
  • --labels 添加一个仅视口的屏幕截图,并覆盖引用标签(打印 MEDIA:<path>)。
  • --urls 将发现的链接目标附加到 AI 快照中。

OpenClaw 支持两种“快照”样式:

  • AI 快照(数字引用)openclaw browser snapshot(默认;--format ai

    • 输出:包含数字引用的文本快照。
    • 操作:openclaw browser click 12openclaw browser type 23 "hello"
    • 在内部,引用通过 Playwright 的 aria-ref 进行解析。
  • 角色快照(类似 e12 的角色引用)openclaw browser snapshot --interactive(或 --compact--depth--selector--frame

    • 输出:带有 [ref=e12](以及可选的 [nth=1])的基于角色的列表/树。
    • 操作:openclaw browser click e12openclaw browser highlight e12
    • 在内部,ref 通过 getByRole(...) 解析(对于重复项则加上 nth())。
    • 添加 --labels 以包含带有叠加 e12 标签的视口截图。
    • 当链接文本有歧义且代理需要具体的导航目标时,添加 --urls
  • ARIA 快照(类似 ax12 的 ARIA refs)openclaw browser snapshot --format aria

    • 输出:作为结构化节点的可访问性树。
    • 操作:当快照路径可以通过 Playwright 和 Chrome 后端 DOM ID 绑定 ref 时,openclaw browser click ax12 有效。
  • 如果 Playwright 不可用,ARIA 快照对于检查仍然有用,但 refs 可能无法执行。当您需要操作 refs 时,请使用 --format ai--interactive 重新快照。

  • raw-CDP 回退路径的 Docker 验证:pnpm test:docker:browser-cdp-snapshot 启动带有 CDP 的 Chromium,运行 browser doctor --deep,并验证角色快照包含链接 URL、光标提升的可点击元素以及 iframe 元数据。

Ref 行为:

  • Refs 在导航之间不稳定;如果操作失败,请重新运行 snapshot 并使用新的 ref。
  • 当能够证明替换选项卡时,/act 会在操作触发的替换后返回当前的原始 targetId。对于后续命令,请继续使用稳定的选项卡 ID/标签。
  • 如果角色快照是使用 --frame 获取的,则角色 refs 的作用域限定在该 iframe,直到下一次角色快照。
  • 未知或过时的 axN refs 会快速失败,而不是回退到 Playwright 的 aria-ref 选择器。发生这种情况时,请在同一选项卡上运行新的快照。

您可以等待的不仅仅是时间/文本:

  • 等待 URL(支持 Playwright 支持的 glob 模式):
    • openclaw browser wait --url "**/dash"
  • 等待加载状态:
    • openclaw browser wait --load networkidle
  • 等待 JS 谓词:
    • openclaw browser wait --fn "window.ready===true"
  • 等待选择器变得可见:
    • openclaw browser wait "#main"

这些可以组合使用:

Terminal window
openclaw browser wait "#main" \
--url "**/dash" \
--load networkidle \
--fn "window.ready===true" \
--timeout-ms 15000

当操作失败时(例如“不可见”、“严格模式违规”、“被覆盖”):

  1. openclaw browser snapshot --interactive
  2. 使用 click <ref> / type <ref>(在交互模式下首选角色 refs)
  3. 如果仍然失败:openclaw browser highlight <ref> 以查看 Playwright 正在以什么为目标
  4. 如果页面表现异常:
    • openclaw browser errors --clear
    • openclaw browser requests --filter api --clear
  5. 进行深度调试:记录跟踪:
    • openclaw browser trace start
    • 复现问题
    • openclaw browser trace stop(打印 TRACE:<path>

--json 用于脚本编写和结构化工具。

示例:

Terminal window
openclaw browser status --json
openclaw browser snapshot --interactive --json
openclaw browser requests --filter api --json
openclaw browser cookies --json

JSON 中的角色快照包含 refs 加上一个小 stats 块(行/字符/引用/交互式),以便工具可以推断负载大小和密度。

这些对于“让网站表现得像 X”的工作流非常有用:

  • Cookies:cookiescookies setcookies clear
  • 存储:storage local|session get|set|clear
  • 离线:set offline on|off
  • Headers:set headers --headers-json '{"X-Debug":"1"}'(旧的 set headers --json '{"X-Debug":"1"}' 仍受支持)
  • HTTP 基本身份验证: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 将其禁用。
  • 当页面端函数 可能需要比默认评估超时更长的时间时,请使用 openclaw browser evaluate --timeout-ms <ms>
  • 有关登录和反机器人说明(X/Twitter 等),请参阅 Browser login + X/Twitter posting
  • 请保持 Gateway(网关)/节点主机的私密性(仅限回环或 tailnet)。
  • 远程 CDP 端点功能强大;请对其进行隧道传输和保护。

严格模式示例(默认阻止私有/内部目标):

{
browser: {
ssrfPolicy: {
dangerouslyAllowPrivateNetwork: false,
hostnameAllowlist: ["*.example.com", "example.com"],
allowedHostnames: ["localhost"], // optional exact allow
},
},
}