- 可以把它看作一个独立的、仅供智能体使用的浏览器。
openclaw配置文件绝不会接触你的个人浏览器配置文件。 - 智能体会在这个隔离通道中打开标签页、读取页面、点击并输入内容。
- 内置的
user配置文件则会通过 Chrome DevTools MCP 附加到你真实的已登录 Chrome 会话。
你将获得什么
- 一个名为 openclaw 的独立浏览器配置文件(默认橙色强调色)。
- 确定性的标签页控制(列出/打开/聚焦/关闭)。
- 智能体操作(点击/输入/拖拽/选择)、快照、截图、PDF。
- 基于 Playwright 的配置文件会把直接附件导航保存到托管下载目录,并在最终 URL 策略验证后返回
{ url, suggestedFilename, path }元数据。 - 当操作立即启动一个或多个下载时,基于 Playwright 的智能体操作会返回包含相同托管元数据的
downloads数组。 - 内置的
browser-automation技能会在启用浏览器插件时,教智能体使用快照、稳定标签页、失效引用和手动阻塞恢复循环。 - 可选的多配置文件支持(
openclaw、work、remote等)。
快速开始
browser.enabled 已关闭;请参阅配置和插件控制。
如果完全缺少 openclaw browser,或者智能体表示浏览器工具不可用,请跳到缺少浏览器命令或工具。
插件控制
默认的browser 工具是一个内置插件。禁用它后,可以用另一个注册相同 browser 工具名称的插件替换它:
plugins.entries.browser.enabled 和 browser.enabled=true。仅禁用插件会将 openclaw browser CLI、browser.request Gateway 网关方法、智能体工具和控制服务作为一个整体移除;你的 browser.* 配置会保留,以供替代插件使用。
浏览器配置更改需要重启 Gateway 网关,这样插件才能重新注册其服务。
智能体指引
工具配置文件说明:tools.profile: "coding" 包含 web_search 和 web_fetch,但不包含完整的 browser 工具。若要让智能体或生成的子智能体使用浏览器自动化,请在配置文件阶段添加 browser:
agents.list[].tools.alsoAllow: ["browser"]。仅设置 tools.subagents.tools.allow: ["browser"] 不够,因为子智能体策略是在配置文件过滤之后应用的。
浏览器插件提供两级智能体指引:
browser工具描述包含精简的常驻契约:选择正确的配置文件、让引用保持在同一标签页上、使用tabId/标签进行标签页定位,并在多步骤工作中加载浏览器技能。- 内置的
browser-automation技能包含更长的操作循环:先检查状态/标签页、标记任务标签页、操作前创建快照、UI 变化后重新创建快照、对失效引用恢复一次,并把登录/2FA/captcha 或摄像头/麦克风阻塞报告为需要手动操作,而不是猜测。
缺少浏览器命令或工具
如果升级后openclaw browser 未知、缺少 browser.request,或智能体报告浏览器工具不可用,通常原因是 plugins.allow 列表遗漏了 browser,并且没有根级 browser 配置块。添加它:
browser 块(browser 下的任何键,例如 browser.enabled=true 或 browser.profiles.<name>)会在受限的 plugins.allow 下激活内置浏览器插件,与内置渠道配置行为一致。plugins.entries.browser.enabled=true 和 tools.alsoAllow: ["browser"] 本身不能替代 allowlist 成员身份。完全移除 plugins.allow 也会恢复默认值。
配置文件:openclaw、user、chrome
openclaw:托管的隔离浏览器(不需要扩展)。user:内置 Chrome DevTools MCP 附加配置文件,用于你的真实已登录 Chrome 会话。Chrome 会在 OpenClaw 第一次附加时显示阻塞式 “Allow remote debugging?” 提示,因此必须有人在电脑旁。chrome:内置Chrome 扩展配置文件,用于你的真实已登录 Chrome 会话。即使桌前没人,也可以从手机使用,因为它通过 OpenClaw 浏览器扩展驱动标签页,而不是远程调试端口,因此不会出现 “Allow remote debugging?” 提示。
- 默认:使用隔离的
openclaw浏览器。 - 当现有登录会话很重要,且用户不在电脑旁(Telegram、WhatsApp 等)时,优先使用
profile="chrome"(扩展)。 - 当现有登录会话很重要,且用户在电脑旁可以批准附加提示时,优先使用
profile="user"(Chrome MCP)。 - 当你想要特定浏览器模式时,
profile是显式覆盖项。
browser.defaultProfile: "openclaw"。
配置
浏览器设置位于~/.openclaw/openclaw.json。
snapshotFormat 或 mode 时,browser.snapshotDefaults.mode: "efficient" 会更改默认 snapshot 提取模式;每次调用的快照选项见浏览器控制 API。
截图视觉(支持纯文本模型)
当主模型是纯文本模型(不支持视觉/多模态)时,浏览器截图会返回模型无法读取的图像块。浏览器截图会复用现有的图像理解配置,因此为媒体理解配置的图像模型可以把截图描述为文本,而不需要任何浏览器专用模型设置。- 智能体调用
browser screenshot,图像会像往常一样捕获到磁盘。 - 浏览器工具会询问现有的图像理解运行时,是否可以使用已配置的媒体图像模型、共享媒体模型、图像模型默认值或有凭证支持的图像提供商来描述截图。
- 视觉模型返回文本描述,该描述会用
wrapExternalContent(提示注入防护)包装,并作为文本块而不是图像块返回给智能体。 - 如果图像理解不可用、被跳过或失败,浏览器会回退为返回原始图像块。
tools.media.image / tools.media.models 字段来配置模型回退、超时、字节限制、配置文件和提供商请求设置。
如果当前活动的主模型已经支持视觉,并且没有配置显式图像理解模型,OpenClaw 会保留正常图像结果,以便主模型直接读取截图。
Ports and reachability
Ports and reachability
- 控制服务绑定到回环地址上的端口,该端口由
gateway.port派生(默认18791= Gateway 网关 + 2)。OPENCLAW_GATEWAY_PORT优先于gateway.port;任一设置都会让同一端口族中的派生端口一起偏移。 - 本地
openclaw配置文件会从控制端口上方 9 个端口开始的范围自动分配cdpPort/cdpUrl(默认18800-18899);仅在 远程 CDP 配置文件或附加到现有会话端点时设置这些值。未设置时,cdpUrl默认使用 托管的本地 CDP 端口。 remoteCdpTimeoutMs适用于远程和attachOnlyCDP HTTP 可达性 检查以及打开标签页的 HTTP 请求;remoteCdpHandshakeTimeoutMs适用于 它们的 CDP WebSocket 握手。持久远程 Playwright 标签页枚举 使用两者中较大的值作为操作截止时间。localLaunchTimeoutMs是本地启动的托管 Chrome 进程暴露其 CDP HTTP 端点的预算。localCdpReadyTimeoutMs是 进程被发现后 CDP websocket 就绪的后续预算。 在 Raspberry Pi、低端 VPS 或 Chromium 启动缓慢的旧硬件上提高这些值。值必须是最大120000ms 的正整数;无效的 配置值会被拒绝。- 重复的托管 Chrome 启动/就绪失败会按 配置文件触发断路。连续失败数次后,OpenClaw 会短暂暂停新的启动 尝试,而不是在每次浏览器工具调用时都生成 Chromium。修复 启动问题,如果不需要浏览器则禁用它,或在修复后重启 Gateway 网关。
actionTimeoutMs是调用方未传入timeoutMs时浏览器act请求的默认预算。客户端传输会添加一个很小的宽限窗口,使长时间等待可以完成,而不是在 HTTP 边界超时。tabCleanup是对主智能体浏览器会话打开的标签页进行的尽力清理。子智能体、cron 和 ACP 生命周期清理仍会在会话结束时关闭它们明确跟踪的标签页;主会话会让活动标签页保持可复用,然后在后台关闭空闲或超量的已跟踪标签页。
SSRF policy
SSRF policy
- 浏览器导航和打开标签页会在导航前受到 SSRF 防护,并在之后对最终
http(s)URL 进行尽力重新检查。 - 在严格 SSRF 模式下,也会检查远程 CDP 端点发现和
/json/version探测(cdpUrl)。 - Gateway 网关/提供商的
HTTP_PROXY、HTTPS_PROXY、ALL_PROXY和NO_PROXY环境变量不会自动代理 OpenClaw 管理的浏览器。托管 Chrome 默认直接启动,因此提供商代理设置不会削弱浏览器 SSRF 检查。 - OpenClaw 管理的本地 CDP 就绪探测和 DevTools WebSocket 连接会绕过托管网络代理,直连准确启动的回环端点,因此当操作员代理阻止回环出站时,
openclaw browser start仍然可用。 - 要代理托管浏览器本身,请通过
browser.extraArgs传入显式 Chrome 代理标志,例如--proxy-server=...或--proxy-pac-url=...。严格 SSRF 模式会阻止显式浏览器代理路由,除非有意启用了私有网络浏览器访问。 browser.ssrfPolicy.dangerouslyAllowPrivateNetwork默认关闭;仅在有意信任私有网络浏览器访问时启用。browser.ssrfPolicy.allowPrivateNetwork仍作为旧版别名受支持。
Profile behavior
Profile behavior
attachOnly: true表示永不启动本地浏览器;只有在已有浏览器运行时才附加。headless可全局设置,也可按本地托管配置文件设置。按配置文件设置的值会覆盖browser.headless,因此一个本地启动的配置文件可以保持无头,而另一个保持可见。POST /start?headless=true和openclaw browser start --headless会请求 本地托管配置文件的一次性无头启动,而不会重写browser.headless或配置文件配置。现有会话、仅附加和 远程 CDP 配置文件会拒绝该覆盖,因为 OpenClaw 不会启动这些 浏览器进程。- 在没有
DISPLAY或WAYLAND_DISPLAY的 Linux 主机上,当环境和配置文件/全局 配置都没有显式选择有头模式时,本地托管配置文件 会自动默认无头。openclaw browser status --json将headlessSource报告为env、profile、config、request、linux-display-fallback或default。 OPENCLAW_BROWSER_HEADLESS=1会强制当前进程的本地托管启动为无头。OPENCLAW_BROWSER_HEADLESS=0会强制普通启动使用有头模式,并在没有显示服务器的 Linux 主机上返回可操作的错误; 显式的start --headless请求仍会对该次启动优先生效。executablePath可全局设置,也可按本地托管配置文件设置。按配置文件设置的值会覆盖browser.executablePath,因此不同的托管配置文件可以启动不同的基于 Chromium 的浏览器。两种形式都接受~表示你的 OS 主目录。color(顶层和按配置文件)会给浏览器 UI 着色,以便你看到哪个配置文件处于活动状态。- 默认配置文件是
openclaw(托管独立)。使用defaultProfile: "user"选择登录用户浏览器。 - 自动检测顺序:如果系统默认浏览器基于 Chromium,则使用它;否则依次为 Chrome、Brave、Edge、Chromium、Chrome Canary。
driver: "existing-session"使用 Chrome DevTools MCP,而不是原始 CDP。它可以通过 Chrome MCP 自动连接附加,或在你已经有运行中浏览器的 DevTools 端点时通过cdpUrl附加。driver: "extension"通过 OpenClaw Chrome extension 驱动你已登录的 Chrome。中继拥有自己的回环端点,因此这些配置文件不接受cdpUrl。这是唯一一种在电脑前无人值守时可用的登录浏览器模式。- 当现有会话配置文件应附加到非默认 Chromium 用户配置文件(Brave、Edge 等)时,设置
browser.profiles.<name>.userDataDir。此路径也接受~表示你的 OS 主目录。
使用 Brave 或其他基于 Chromium 的浏览器
如果你的系统默认浏览器基于 Chromium(Chrome/Brave/Edge 等), OpenClaw 会自动使用它。设置browser.executablePath 可覆盖
自动检测。顶层和按配置文件的 executablePath 值接受 ~
表示你的 OS 主目录:
- macOS
- Windows
- Linux
executablePath 仅影响 OpenClaw
启动的本地托管配置文件。existing-session 配置文件会改为附加到已经运行的浏览器,
远程 CDP 配置文件则使用 cdpUrl 后面的浏览器。
本地控制与远程控制
- 本地控制(默认): Gateway 网关启动回环控制服务,并可启动本地浏览器。
- 远程控制(节点主机): 在拥有浏览器的机器上运行节点主机;Gateway 网关将浏览器操作代理给它。
- 远程 CDP: 设置
browser.profiles.<name>.cdpUrl(或browser.cdpUrl)以 附加到远程基于 Chromium 的浏览器。在这种情况下,OpenClaw 不会启动本地浏览器。 - 对于回环地址上的外部托管 CDP 服务(例如在
Docker 中发布到
127.0.0.1的 Browserless),还要设置attachOnly: true。没有attachOnly的回环 CDP 会被视为本地 OpenClaw 托管浏览器配置文件。 headless仅影响 OpenClaw 启动的本地托管配置文件。它不会重启或更改现有会话或远程 CDP 浏览器。executablePath遵循相同的本地托管配置文件规则。在 运行中的本地托管配置文件上更改它,会将该配置文件标记为需要重启/协调,以便 下一次启动使用新的二进制文件。
- 本地托管配置文件:
openclaw browser stop会停止 OpenClaw 启动的浏览器进程 - 仅附加和远程 CDP 配置文件:
openclaw browser stop会关闭活动的 控制会话,并释放 Playwright/CDP 仿真覆盖(视口、 配色方案、区域设置、时区、离线模式以及类似状态),即使 没有浏览器进程由 OpenClaw 启动
- 查询令牌(例如
https://provider.example?token=<token>) - HTTP Basic auth(例如
https://user:pass@provider.example)
/json/* 端点以及连接到
CDP WebSocket 时会保留认证信息。对于令牌,优先使用环境变量或密钥管理器,
而不是将其提交到配置文件。
节点浏览器代理(零配置默认)
如果你在拥有浏览器的机器上运行节点主机,OpenClaw 可以 自动将浏览器工具调用路由到该节点,无需任何额外浏览器配置。 这是远程 Gateway 网关的默认路径。 说明:- 节点主机通过代理命令暴露其本地浏览器控制服务器。
- 配置文件来自节点自己的
browser.profiles配置(与本地相同)。 - 无论
allowProfiles如何,代理命令从不允许持久配置文件变更(create-profile、delete-profile、reset-profile);请直接在节点上进行这些更改。 nodeHost.browserProxy.allowProfiles是可选的。留空以使用旧版/默认行为:所有已配置的配置文件仍可通过代理访问。- 如果设置
nodeHost.browserProxy.allowProfiles,OpenClaw 会将其视为最小权限边界,用于限制代理将目标指向哪些配置文件名称。 - 如果你不想使用它,可以禁用:
- 在节点上:
nodeHost.browserProxy.enabled=false - 在 Gateway 网关上:
gateway.nodes.browser.mode="off"(也接受"auto"以选择单个已连接的浏览器节点,或"manual"以要求显式节点参数)
- 在节点上:
Browserless(托管远程 CDP)
Browserless 是一种托管 Chromium 服务,它通过 HTTPS 和 WebSocket 暴露 CDP 连接 URL。OpenClaw 可以使用任一形式,但 对于远程浏览器配置文件,最简单的选项是 Browserless 连接文档中的直接 WebSocket URL。 示例:- 将
<BROWSERLESS_API_KEY>替换为你的真实 Browserless 令牌。 - 选择与你的 Browserless 账户匹配的区域端点(参见其文档)。
- 如果 Browserless 给你一个 HTTPS 基础 URL,你可以将其转换为
wss://用于直接 CDP 连接,或保留 HTTPS URL 并让 OpenClaw 发现/json/version。
同一主机上的 Browserless Docker
当 Browserless 在 Docker 中自托管且 OpenClaw 在主机上运行时,将 Browserless 视为外部托管的 CDP 服务:browser.profiles.browserless.cdpUrl 中的地址必须能从 OpenClaw 进程访问。Browserless 还必须通告一个匹配且可访问的端点;将 Browserless 的 EXTERNAL 设置为同一个面向 OpenClaw 的公开 WebSocket 基址,例如 ws://127.0.0.1:3000、ws://browserless:3000,或稳定的私有 Docker 网络地址。如果 /json/version 返回的 webSocketDebuggerUrl 指向 OpenClaw 无法访问的地址,CDP HTTP 可能看起来健康,但 WebSocket 附加仍会失败。
不要让 local loopback Browserless 配置的 attachOnly 保持未设置。没有 attachOnly 时,OpenClaw 会将 local loopback 端口视为本地托管的浏览器配置,并可能报告该端口正在使用但不归 OpenClaw 所有。
直接 WebSocket CDP 提供商
某些托管浏览器服务会公开直接 WebSocket端点,而不是标准的基于 HTTP 的 CDP 发现(/json/version)。OpenClaw 接受三种 CDP URL 形态,并会自动选择正确的连接策略:
- HTTP(S) 发现 -
http://host[:port]或https://host[:port]。 OpenClaw 调用/json/version来发现 WebSocket 调试器 URL,然后连接。没有 WebSocket fallback。 - 直接 WebSocket 端点 -
ws://host[:port]/devtools/<kind>/<id>,或带有/devtools/browser|page|worker|shared_worker|service_worker/<id>路径的wss://...。 OpenClaw 通过 WebSocket 握手直接连接,并完全跳过/json/version。 - 裸 WebSocket 根地址 -
ws://host[:port]或wss://host[:port],没有/devtools/...路径(例如 Browserless、Browserbase)。OpenClaw 会先尝试 HTTP/json/version发现(将 scheme 规范化为http/https);如果发现返回webSocketDebuggerUrl,就使用它,否则 OpenClaw fallback 到裸根地址上的直接 WebSocket 握手。如果通告的 WebSocket 端点拒绝 CDP 握手,但配置的裸根地址接受它,OpenClaw 也会 fallback 到该根地址。这样,指向本地 Chrome 的裸ws://仍可连接,因为 Chrome 只接受来自/json/version的特定按目标路径上的 WebSocket 升级;同时,托管提供商在其发现端点通告不适合 Playwright CDP 的短期 URL 时,仍可使用其根 WebSocket 端点。
openclaw browser doctor 使用与运行时附加相同的先发现、WebSocket fallback 逻辑,因此能够成功连接的裸根 URL 不会被诊断报告为不可达。
Browserbase
Browserbase 是一个用于运行无头浏览器的云平台,内置 CAPTCHA 解决、隐身模式和住宅代理。- 注册,并从概览仪表盘复制你的 API Key。
- 将
<BROWSERBASE_API_KEY>替换为你的真实 Browserbase API key。 - Browserbase 会在 WebSocket 连接时自动创建浏览器会话,因此不需要手动创建会话步骤。
- 查看价格,了解当前免费层限制和付费套餐。
- 查看 Browserbase 文档,获取完整 API 参考、SDK 指南和集成示例。
Notte
Notte 是一个用于运行无头浏览器的云平台,内置隐身、住宅代理和 CDP 原生 WebSocket 网关。- 注册,并从控制台设置页面复制你的 API Key。
- 将
<NOTTE_API_KEY>替换为你的真实 Notte API key。 - Notte 会在 WebSocket 连接时自动创建浏览器会话,因此不需要手动创建会话步骤。WebSocket 断开连接时,会销毁该会话。
- 查看价格,了解当前免费层限制和付费套餐。
- 查看 Notte 文档,获取完整 API 参考、SDK 指南和集成示例。
安全
关键思路:- 浏览器控制仅限 local loopback;访问通过 Gateway 网关的认证或节点配对流转。
- 独立的 local loopback 浏览器 HTTP API 仅使用共享密钥认证:
gateway token bearer auth、
x-openclaw-password,或使用已配置 gateway 密码的 HTTP Basic auth。 - Tailscale Serve 身份标头和
gateway.auth.mode: "trusted-proxy"不会认证这个独立的 local loopback 浏览器 API。 - 如果浏览器控制已启用且未配置共享密钥认证,OpenClaw 会在启动时自动生成并持久化浏览器控制凭据:
当
gateway.auth.mode为none时生成 token,或当它为trusted-proxy时生成密码(通过gateway.auth.password持久化,以便进程外 local loopback 客户端能够解析)。当该模式已经配置显式字符串凭据,或gateway.auth.mode为password时,会跳过自动生成。 - 如果你想使用自己控制的稳定密钥,而不是生成的密钥,请显式配置
gateway.auth.token、gateway.auth.password、OPENCLAW_GATEWAY_TOKEN或OPENCLAW_GATEWAY_PASSWORD。
- 尽可能优先使用加密端点(HTTPS 或 WSS)和短期 token。
- 避免将长期 token 直接嵌入配置文件。
- 将 Gateway 网关和任何节点主机保持在私有网络(Tailscale)上;避免公开暴露。
- 将远程 CDP URL/token 视为密钥;优先使用环境变量或密钥管理器。
配置(多浏览器)
OpenClaw 支持多个命名配置(路由配置)。配置可以是:- openclaw-managed:专用的基于 Chromium 的浏览器实例,带有自己的用户数据目录 + CDP 端口
- remote:显式 CDP URL(在其他位置运行的基于 Chromium 的浏览器)
- existing session:通过 Chrome DevTools MCP 自动连接你的现有 Chrome 配置
- 如果缺失,会自动创建
openclaw配置。 user配置是内置的,用于 Chrome MCP existing-session 附加。- 除
user之外,existing-session 配置需要显式启用;使用--driver existing-session创建它们。 - 本地 CDP 端口默认从 18800-18899 分配。
- 删除配置会将其本地数据目录移到废纸篓。
?profile=<name>;CLI 使用 --browser-profile。
通过 Chrome DevTools MCP 使用现有会话
OpenClaw 还可以通过官方 Chrome DevTools MCP 服务器附加到正在运行的基于 Chromium 的浏览器配置。这会复用该浏览器配置中已经打开的标签页和登录状态。 官方背景和设置参考: 内置配置:user。如果你想使用不同的名称、颜色或浏览器数据目录,可以创建自己的自定义 existing-session 配置。
默认情况下,内置 user 配置使用 Chrome MCP 自动连接,目标是默认的本地 Google Chrome 配置。对 Brave、Edge、Chromium 或非默认 Chrome 配置使用 userDataDir。~ 会展开为你的 OS 主目录:
- 打开该浏览器用于远程调试的 inspect 页面。
- 启用远程调试。
- 保持浏览器运行,并在 OpenClaw 附加时批准连接提示。
- Chrome:
chrome://inspect/#remote-debugging - Brave:
brave://inspect/#remote-debugging - Edge:
edge://inspect/#remote-debugging
status显示driver: existing-sessionstatus显示transport: chrome-mcpstatus显示running: truetabs列出你已经打开的浏览器标签页snapshot返回所选实时标签页中的 refs
- 目标基于 Chromium 的浏览器版本为
144+ - 该浏览器的 inspect 页面中已启用远程调试
- 浏览器已显示附加同意提示,并且你已接受
- 如果 Chrome 是用显式
--remote-debugging-port启动的,请将browser.profiles.<name>.cdpUrl设置为该 DevTools 端点,而不是依赖 Chrome MCP 自动连接 openclaw doctor会迁移旧的基于扩展的浏览器配置,并检查默认自动连接配置是否在本地安装了 Chrome,但它不能替你启用浏览器侧远程调试
- 当你需要用户已登录的浏览器状态时,使用
profile="user"。 - 如果使用自定义 existing-session 配置,请传入该显式配置名称。
- 仅在用户位于电脑前可以批准附加提示时选择此模式。
- Gateway 网关或节点主机可以启动
npx chrome-devtools-mcp@latest --autoConnect。
- 这条路径的风险高于隔离的
openclaw配置,因为它可以在你的已登录浏览器会话中操作。 - OpenClaw 不会为此驱动启动浏览器;它只会附加。
- OpenClaw 在这里使用官方 Chrome DevTools MCP
--autoConnect流。如果设置了userDataDir,它会被透传,以定位该用户数据目录。 - Existing-session 可以在所选主机上附加,也可以通过已连接的浏览器节点附加。如果 Chrome 位于其他位置且没有连接浏览器节点,请改用远程 CDP 或节点主机。
自定义 Chrome MCP 启动
当默认的npx chrome-devtools-mcp@latest 流不符合你的需求时(离线主机、固定版本、供应商内置二进制文件),可按配置覆盖每个配置启动的 Chrome DevTools MCP 服务器:
| 字段 | 作用 |
|---|---|
mcpCommand | 要启动的可执行文件,用于替代 npx。按原样解析;绝对路径会被保留。 |
mcpArgs | 原样传递给 mcpCommand 的参数数组。替换默认的 chrome-devtools-mcp@latest --autoConnect 参数。 |
cdpUrl 时,OpenClaw 会跳过 --autoConnect,并自动将端点转发给 Chrome MCP:
http(s)://...→--browserUrl <url>(DevTools HTTP 发现端点)。ws(s)://...→--wsEndpoint <url>(直接 CDP WebSocket)。
userDataDir 不能组合使用:当设置 cdpUrl 时,Chrome MCP 启动会忽略 userDataDir,因为 Chrome MCP 会附加到端点背后的正在运行的浏览器,而不是打开配置目录。
Existing-session 功能限制
Existing-session 功能限制
与托管的
openclaw 配置相比,existing-session 驱动约束更多:- 截图 - 页面捕获和
--ref元素捕获可用;CSS--element选择器不可用。基于页面或 ref 的元素截图不需要 Playwright。(--full-page在任何配置文件上都不能与--ref或--element组合使用,不只是现有会话。) - 操作 -
click、type、hover、scrollIntoView、drag和select需要快照 ref(不能使用 CSS 选择器)。click-coords点击可见视口坐标,不需要快照 ref。click仅限左键(不支持按钮覆盖或修饰键)。type不支持slowly=true;请使用fill或press。press不支持delayMs。type、hover、scrollIntoView、drag、select、fill和evaluate不支持逐调用的timeoutMs覆盖。select接受单个值。不支持batch;请逐个发送操作。 - 等待 / 上传 / 对话框 -
wait --url支持精确、子字符串和 glob 模式(与托管模式相同);wait --load networkidle在现有会话配置文件上不受支持(它适用于托管以及原始/远程 CDP 配置文件)。上传钩子需要ref或inputRef,一次一个文件,不支持 CSSelement。对话框钩子不支持超时覆盖或dialogId。 - 对话框可见性 - 当某个操作打开模态对话框时,托管浏览器操作响应会包含
blockedByDialog和browserState.dialogs.pending;快照也会包含待处理对话框状态。在对话框待处理期间,使用browser dialog --accept/--dismiss --dialog-id <id>响应。在 OpenClaw 之外处理的对话框会显示在browserState.dialogs.recent下。 - 仅托管功能 - PDF 导出、下载拦截和
responsebody仍然需要托管浏览器路径。
隔离保证
- 专用用户数据目录:绝不会触碰你的个人浏览器配置文件。
- 专用端口:避开
9222,防止与开发工作流冲突。 - 确定性的标签页控制:
tabs先返回suggestedTargetId,然后返回稳定的tabId句柄,例如t1、可选标签和原始targetId。 Agent 应复用suggestedTargetId;原始 id 仍可用于调试和兼容。
浏览器选择
本地启动时,OpenClaw 会选择第一个可用项:- Chrome
- Brave
- Edge
- Chromium
- Chrome Canary
browser.executablePath 覆盖。
平台:
- macOS:检查
/Applications和~/Applications。 - Linux:检查
/usr/bin、/snap/bin、/opt/google、/opt/brave.com、/usr/lib/chromium和/usr/lib/chromium-browser下的常见 Chrome/Brave/Edge/Chromium 位置,以及PLAYWRIGHT_BROWSERS_PATH或~/.cache/ms-playwright下由 Playwright 管理的 Chromium。 - Windows:检查常见安装位置。
控制 API(可选)
对于脚本编写和调试,Gateway 网关暴露一个小型仅限回环的 HTTP 控制 API,以及匹配的openclaw browser CLI(快照、refs、等待
增强、JSON 输出、调试工作流)。完整参考见
浏览器控制 API。
故障排查
对于 Linux 特定问题(尤其是 snap Chromium),请参阅 浏览器故障排查。 对于 WSL2 Gateway 网关 + Windows Chrome 分主机设置,请参阅 WSL2 + Windows + 远程 Chrome CDP 故障排查。CDP 启动失败与导航 SSRF 拦截
这是不同的失败类别,并且指向不同的代码路径。- CDP 启动或就绪失败表示 OpenClaw 无法确认浏览器控制平面健康。
- 导航 SSRF 拦截表示浏览器控制平面健康,但页面导航目标被策略拒绝。
- CDP 启动或就绪失败:
Chrome CDP websocket for profile "openclaw" is not reachable after startRemote CDP for profile "<name>" is not reachable at <cdpUrl>- 当配置了不带
attachOnly: true的回环外部 CDP 服务时,出现Port <port> is in use for profile "<name>" but not by openclaw
- 导航 SSRF 拦截:
open、navigate、快照或打开标签页流程因浏览器/网络策略错误而失败,但start和tabs仍然可用
- 如果
start失败并显示not reachable after start,先排查 CDP 就绪性。 - 如果
start成功但tabs失败,则控制平面仍然不健康。将其视为 CDP 可达性问题,而不是页面导航问题。 - 如果
start和tabs成功但open或navigate失败,则浏览器控制平面已启动,失败发生在导航策略或目标页面中。 - 如果
start、tabs和open全部成功,则基本的托管浏览器控制路径是健康的。
- 即使你没有配置
browser.ssrfPolicy,浏览器配置也默认使用失败关闭的 SSRF 策略对象。 - 对于 local loopback
openclaw托管配置文件,CDP 健康检查会有意跳过针对 OpenClaw 自有本地控制平面的浏览器 SSRF 可达性强制检查。 - 导航保护是独立的。成功的
start或tabs结果并不意味着后续的open或navigate目标会被允许。
- 默认情况下不要放宽浏览器 SSRF 策略。
- 优先使用窄范围主机例外,例如
hostnameAllowlist或allowedHostnames,而不是宽泛的私有网络访问。 - 仅在有意信任、需要并已审核私有网络浏览器访问的环境中使用
dangerouslyAllowPrivateNetwork: true。
Agent 工具 + 控制如何工作
Agent 会获得一个工具用于浏览器自动化:browser- doctor/status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
browser snapshot返回稳定的 UI 树(AI 或 ARIA)。browser act使用快照refID 进行点击/输入/拖拽/选择。browser screenshot捕获像素(整页、元素或带标签的 refs)。browser doctor检查 Gateway 网关、插件、配置文件、浏览器和标签页就绪性。browser接受:profile用于选择命名浏览器配置文件(openclaw、chrome 或远程 CDP)。target(sandbox|host|node)用于选择浏览器所在位置。- 在沙箱隔离会话中,
target: "host"需要agents.defaults.sandbox.browser.allowHostControl=true。 - 如果省略
target:沙箱隔离会话默认为sandbox,非沙箱会话默认为host。 - 如果连接了支持浏览器的节点,工具可能会自动路由到该节点,除非你固定
target="host"或target="node"。