跳轉到主要內容
OpenClaw 可以執行一個由代理程式控制的專用 Chrome/Brave/Edge/Chromium 設定檔。它透過 Gateway 內的小型本機控制服務執行(僅限 loopback),並與你的個人瀏覽器隔離。
  • 可以把它想成一個獨立、僅供代理程式使用的瀏覽器openclaw 設定檔絕不會碰到你的個人瀏覽器設定檔。
  • 代理程式會在這個隔離通道中開啟分頁、讀取頁面、點擊和輸入文字。
  • 內建的 user 設定檔則會改用 Chrome DevTools MCP 連接到你真實已登入的 Chrome 工作階段。

你會得到什麼

  • 名為 openclaw 的獨立瀏覽器設定檔(預設為橘色強調色)。
  • 可預期的分頁控制(列出/開啟/聚焦/關閉)。
  • 代理程式動作(點擊/輸入/拖曳/選取)、快照、螢幕截圖、PDF。
  • 由 Playwright 支援的設定檔會將直接附件導覽儲存在受管理的下載目錄下,並在最終 URL 政策驗證後回傳 { url, suggestedFilename, path } 中繼資料。
  • 由 Playwright 支援的代理程式動作若立即啟動一個或多個下載,會回傳包含相同受管理中繼資料的 downloads 陣列。
  • 內建的 browser-automation skill,會在啟用瀏覽器外掛時教導代理程式快照、 穩定分頁、過期參照,以及手動阻擋復原迴圈。
  • 選用的多設定檔支援(openclawworkremote、…)。
這個瀏覽器不是你的日常瀏覽器。它是提供給代理程式自動化與驗證使用的安全、隔離介面。

快速開始

openclaw browser --browser-profile openclaw doctor
openclaw browser --browser-profile openclaw doctor --deep
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」表示外掛或 browser.enabled 已關閉;請參閱 設定外掛控制 如果 openclaw browser 完全不存在,或代理程式表示瀏覽器工具 不可用,請跳到缺少瀏覽器命令或工具

外掛控制

預設的 browser 工具是內建外掛。停用它,即可改用另一個註冊相同 browser 工具名稱的外掛:
{
  plugins: {
    entries: {
      browser: {
        enabled: false,
      },
    },
  },
}
預設值需要同時有 plugins.entries.browser.enabled 以及 browser.enabled=true。只停用外掛會把 openclaw browser 命令列介面、browser.request 閘道方法、代理程式工具和控制服務作為一個單元移除;你的 browser.* 設定會保留下來,供替代實作使用。 瀏覽器設定變更需要重新啟動 Gateway,外掛才能重新註冊其服務。

代理程式指引

工具設定檔注意事項:tools.profile: "coding" 包含 web_searchweb_fetch,但不包含完整的 browser 工具。若要讓代理程式或 衍生的子代理程式使用瀏覽器自動化,請在設定檔階段加入 browser:
{
  tools: {
    profile: "coding",
    alsoAllow: ["browser"],
  },
}
對單一代理程式,使用 agents.list[].tools.alsoAllow: ["browser"]。 單獨使用 tools.subagents.tools.allow: ["browser"] 還不夠,因為子代理程式 政策會在設定檔篩選之後套用。 瀏覽器外掛提供兩層代理程式指引:
  • browser 工具描述包含精簡且永遠啟用的合約:選擇正確的設定檔、讓參照保持在同一個分頁、使用 tabId/標籤進行分頁目標指定,並針對多步驟工作載入瀏覽器 skill。
  • 內建的 browser-automation skill 包含較完整的操作迴圈: 先檢查狀態/分頁、標記工作分頁、動作前建立快照、UI 變更後重新建立快照、 過期參照復原一次,並將登入/2FA/captcha 或 相機/麥克風阻擋回報為需要手動操作,而不是猜測。
外掛內建的 Skills 會在外掛啟用時列入代理程式可用的 Skills。完整 skill 指示會按需載入,因此例行回合不會支付完整的 token 成本。

缺少瀏覽器命令或工具

如果升級後 openclaw browser 無法識別、browser.request 遺失,或代理程式回報瀏覽器工具不可用,常見原因是 plugins.allow 清單省略了 browser,且根層沒有 browser 設定區塊。請加入:
{
  plugins: {
    allow: ["telegram", "browser"],
  },
}
明確的根層 browser 區塊(browser 下的任何鍵,例如 browser.enabled=truebrowser.profiles.<name>)即使在限制性的 plugins.allow 下,也會啟用內建瀏覽器外掛,與內建頻道設定行為一致。 plugins.entries.browser.enabled=truetools.alsoAllow: ["browser"] 本身不能取代允許清單成員資格。 完全移除 plugins.allow 也會還原預設值。

設定檔:openclawuserchrome

  • 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
{
  browser: {
    enabled: true, // default: true
    evaluateEnabled: true, // default: true; false disables act:evaluate (arbitrary JS)
    ssrfPolicy: {
      // dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access
      // hostnameAllowlist: ["*.example.com", "example.com"],
      // allowedHostnames: ["localhost"],
    },
    // 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)
    localLaunchTimeoutMs: 15000, // local managed Chrome discovery timeout (ms)
    localCdpReadyTimeoutMs: 8000, // local managed post-launch CDP readiness timeout (ms)
    actionTimeoutMs: 60000, // default browser act timeout (ms)
    tabCleanup: {
      enabled: true, // default: true
      idleMinutes: 120, // set 0 to disable idle cleanup
      maxTabsPerSession: 8, // set 0 to disable the per-session cap
      sweepMinutes: 5,
    },
    // snapshotDefaults: { mode: "efficient" }, // default snapshot mode when the caller omits one
    defaultProfile: "openclaw",
    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",
        headless: true,
        executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
      },
      user: {
        driver: "existing-session",
        attachOnly: true,
        color: "#00AA00",
      },
      brave: {
        driver: "existing-session",
        attachOnly: true,
        userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser",
        color: "#FB542B",
      },
      remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
    },
  },
}
browser.snapshotDefaults.mode: "efficient" 會在呼叫者未傳入明確的 snapshotFormatmode 時,變更預設 snapshot 擷取模式;每次呼叫的快照選項請參閱瀏覽器控制 API

螢幕截圖視覺(純文字模型支援)

當主要模型是純文字(不支援視覺/多模態)時,瀏覽器螢幕截圖會回傳模型無法讀取的圖片區塊。瀏覽器螢幕截圖會重用既有的圖片理解設定,因此設定用於媒體理解的圖片模型可以將螢幕截圖描述成文字,而不需要任何瀏覽器專用的模型設定。
{
  tools: {
    media: {
      image: {
        models: [
          { provider: "bytedance", model: "doubao-seed-2.0-pro" },
          // Add fallback candidates; first success wins
          { provider: "openai", model: "gpt-4o" },
        ],
      },
      // Shared media models also work when tagged for image support.
      // models: [{ provider: "openai", model: "gpt-4o", capabilities: ["image"] }],
    },
  },
  agents: {
    defaults: {
      // Existing image-model defaults are also honored.
      // imageModel: { primary: "openai/gpt-4o" },
    },
  },
}
運作方式:
  1. 代理程式呼叫 browser screenshot,圖片會照常擷取到磁碟。
  2. 瀏覽器工具會詢問既有的圖片理解執行階段,是否能使用已設定的媒體圖片模型、共享媒體模型、圖片模型預設值,或由驗證支援的圖片供應商來描述螢幕截圖。
  3. 視覺模型會回傳文字描述,並以 wrapExternalContent(提示注入防護)包裝後,作為文字區塊而不是圖片區塊回傳給代理程式。
  4. 如果圖片理解不可用、被略過或失敗,瀏覽器會退回回傳原始圖片區塊。
使用既有的 tools.media.image / tools.media.models 欄位來設定模型 備援、逾時、位元組限制、設定檔,以及供應商請求設定。 如果作用中的主要模型已支援視覺,且沒有設定明確的圖片理解模型,OpenClaw 會保留一般圖片結果,讓主要模型可以直接讀取螢幕截圖。
  • 控制服務會繫結到 loopback,其連接埠衍生自 gateway.port(預設 18791 = 閘道 + 2)。OPENCLAW_GATEWAY_PORT 優先於 gateway.port;兩者都會以同一族群的方式位移衍生連接埠。
  • 本機 openclaw 設定檔會從控制連接埠上方 9 個連接埠開始的範圍自動指派 cdpPort/cdpUrl(預設 18800-18899);只有在 遠端 CDP 設定檔或既有工作階段端點附加時才設定這些值。未設定時,cdpUrl 預設為 受管理的本機 CDP 連接埠。
  • remoteCdpTimeoutMs 會套用到遠端與 attachOnly CDP HTTP 可連線性 檢查,以及開啟分頁的 HTTP 請求;remoteCdpHandshakeTimeoutMs 會套用到 它們的 CDP WebSocket 握手。持久遠端 Playwright 分頁列舉 會使用兩者中較大的值作為其操作期限。
  • localLaunchTimeoutMs 是本機啟動的受管理 Chrome 程序公開其 CDP HTTP 端點的預算。localCdpReadyTimeoutMs 是在發現程序後, CDP websocket 就緒的後續預算。 在 Raspberry Pi、低階 VPS,或 Chromium 啟動緩慢的舊硬體上提高這些值。值必須是最高 120000 ms 的正整數;無效的 設定值會遭到拒絕。
  • 重複的受管理 Chrome 啟動/就緒失敗會依 設定檔進行斷路。連續失敗數次後,OpenClaw 會短暫暫停新的啟動 嘗試,而不是在每次瀏覽器工具呼叫時都產生 Chromium。修正 啟動問題、若不需要瀏覽器就停用它,或在修復後重新啟動 閘道。
  • actionTimeoutMs 是呼叫者未傳遞 timeoutMs 時,瀏覽器 act 請求的預設預算。用戶端傳輸會加入小幅寬限視窗,讓長時間等待可以完成,而不是在 HTTP 邊界逾時。
  • tabCleanup 是對主要代理瀏覽器工作階段所開啟分頁的盡力清理。子代理、排程和 ACP 生命週期清理仍會在工作階段結束時關閉其明確追蹤的分頁;主要工作階段會保持作用中分頁可重複使用,然後在背景關閉閒置或超量的已追蹤分頁。
  • 瀏覽器導覽和開啟分頁會在導覽前受到 SSRF 防護,並在之後對最終 http(s) URL 進行盡力重新檢查。
  • 在嚴格 SSRF 模式中,遠端 CDP 端點探索和 /json/version 探測(cdpUrl)也會被檢查。
  • 閘道/提供者 HTTP_PROXYHTTPS_PROXYALL_PROXYNO_PROXY 環境變數不會自動代理 OpenClaw 管理的瀏覽器。受管理的 Chrome 預設直接啟動,因此提供者代理設定不會削弱瀏覽器 SSRF 檢查。
  • OpenClaw 管理的本機 CDP 就緒探測和 DevTools WebSocket 連線會針對精確啟動的 loopback 端點繞過受管理的網路代理,因此當操作員代理阻擋 loopback 輸出時,openclaw browser start 仍可運作。
  • 若要代理受管理的瀏覽器本身,請透過 browser.extraArgs 傳遞明確的 Chrome 代理旗標,例如 --proxy-server=...--proxy-pac-url=...。嚴格 SSRF 模式會阻擋明確的瀏覽器代理路由,除非已刻意啟用私人網路瀏覽器存取。
  • browser.ssrfPolicy.dangerouslyAllowPrivateNetwork 預設關閉;只有在私人網路瀏覽器存取受到刻意信任時才啟用。
  • browser.ssrfPolicy.allowPrivateNetwork 仍支援作為舊版別名。
  • attachOnly: true 表示永遠不啟動本機瀏覽器;只有在已經有瀏覽器執行時才附加。
  • headless 可以全域設定或按本機受管理設定檔設定。每個設定檔的值會覆寫 browser.headless,因此一個本機啟動的設定檔可以保持 headless,而另一個仍保持可見。
  • POST /start?headless=trueopenclaw browser start --headless 會為本機受管理設定檔要求 一次性的 headless 啟動,而不改寫 browser.headless 或設定檔組態。既有工作階段、僅附加和 遠端 CDP 設定檔會拒絕此覆寫,因為 OpenClaw 不會啟動那些 瀏覽器程序。
  • 在沒有 DISPLAYWAYLAND_DISPLAY 的 Linux 主機上,當環境與設定檔/全域 組態都未明確選擇 headed 模式時,本機受管理設定檔 預設會自動採用 headless。openclaw browser status --json 會將 headlessSource 回報為 envprofileconfigrequestlinux-display-fallbackdefault
  • OPENCLAW_BROWSER_HEADLESS=1 會強制目前程序的本機受管理啟動使用 headless。 OPENCLAW_BROWSER_HEADLESS=0 會強制一般 啟動使用 headed 模式,並在沒有顯示伺服器的 Linux 主機上傳回可操作的錯誤; 明確的 start --headless 請求仍會在該次啟動勝出。
  • executablePath 可以全域設定或按本機受管理設定檔設定。每個設定檔的值會覆寫 browser.executablePath,因此不同的受管理設定檔可以啟動不同的 Chromium-based 瀏覽器。兩種形式都接受 ~ 作為你的 OS 主目錄。
  • color(頂層和每個設定檔)會為瀏覽器 UI 著色,讓你可以看出哪個設定檔處於作用中。
  • 預設設定檔是 openclaw(受管理的獨立設定檔)。使用 defaultProfile: "user" 來選擇已登入的使用者瀏覽器。
  • 自動偵測順序:若系統預設瀏覽器為 Chromium-based,則使用它;否則依序使用 Chrome、Brave、Edge、Chromium、Chrome Canary。
  • driver: "existing-session" 使用 Chrome DevTools MCP,而不是原始 CDP。它可以透過 Chrome MCP 自動連線附加,或在你已經有執行中瀏覽器的 DevTools 端點時,透過 cdpUrl 附加。
  • driver: "extension" 會透過 OpenClaw Chrome extension 驅動你已登入的 Chrome。轉送器擁有其 loopback 端點,因此這些設定檔不接受 cdpUrl。這是唯一可在電腦前無人時運作的已登入瀏覽器模式。
  • 當既有工作階段設定檔應附加到非預設 Chromium 使用者設定檔(Brave、Edge 等)時,請設定 browser.profiles.<name>.userDataDir。此路徑也接受 ~ 作為你的 OS 主目錄。

使用 Brave 或其他 Chromium-based 瀏覽器

如果你的系統預設瀏覽器是 Chromium-based(Chrome/Brave/Edge/等), OpenClaw 會自動使用它。設定 browser.executablePath 以覆寫 自動偵測。頂層和每個設定檔的 executablePath 值接受 ~ 作為你的 OS 主目錄:
openclaw config set browser.executablePath "/usr/bin/google-chrome"
openclaw config set browser.profiles.work.executablePath "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
或在組態中依平台設定:
{
  browser: {
    executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
  },
}
每個設定檔的 executablePath 只會影響 OpenClaw 啟動的本機受管理設定檔。existing-session 設定檔會改為附加到已執行的瀏覽器, 而遠端 CDP 設定檔會使用 cdpUrl 後方的瀏覽器。

本機與遠端控制

  • **本機控制(預設):**閘道會啟動 loopback 控制服務,並可以啟動本機瀏覽器。
  • **遠端控制(節點主機):**在擁有瀏覽器的機器上執行節點主機;閘道會將瀏覽器動作代理到它。
  • **遠端 CDP:**設定 browser.profiles.<name>.cdpUrl(或 browser.cdpUrl)以 附加到遠端 Chromium-based 瀏覽器。在此情況下,OpenClaw 不會啟動本機瀏覽器。
  • 對於 loopback 上外部管理的 CDP 服務(例如在 Docker 中發佈到 127.0.0.1 的 Browserless), 也請設定 attachOnly: true。沒有 attachOnly 的 loopback CDP 會被視為本機 OpenClaw 管理的瀏覽器設定檔。
  • headless 只會影響 OpenClaw 啟動的本機受管理設定檔。它不會重新啟動或變更既有工作階段或遠端 CDP 瀏覽器。
  • executablePath 遵循相同的本機受管理設定檔規則。在 執行中的本機受管理設定檔上變更它,會將該設定檔標記為需要重新啟動/協調,使 下一次啟動使用新的二進位檔。
停止行為會依設定檔模式而異:
  • 本機受管理設定檔:openclaw browser stop 會停止 OpenClaw 啟動的瀏覽器程序
  • 僅附加和遠端 CDP 設定檔:openclaw browser stop 會關閉作用中的 控制工作階段,並釋放 Playwright/CDP 模擬覆寫(viewport、 色彩配置、地區設定、時區、離線模式和類似狀態),即使 沒有任何瀏覽器程序是由 OpenClaw 啟動的
遠端 CDP URL 可以包含驗證:
  • 查詢權杖(例如 https://provider.example?token=<token>
  • HTTP Basic 驗證(例如 https://user:pass@provider.example
OpenClaw 會在呼叫 /json/* 端點和連線到 CDP WebSocket 時保留驗證。請優先使用環境變數或祕密管理工具保存 權杖,而不是將其提交到組態檔。

節點瀏覽器代理(零組態預設)

如果你在擁有瀏覽器的機器上執行節點主機,OpenClaw 可以 自動將瀏覽器工具呼叫路由到該節點,而不需要任何額外的瀏覽器組態。 這是遠端閘道的預設路徑。 注意事項:
  • 節點主機會透過代理命令公開其本機瀏覽器控制伺服器。
  • 設定檔來自節點自己的 browser.profiles 組態(與本機相同)。
  • 無論 allowProfiles 為何,代理命令永遠不允許持久的設定檔變更(create-profiledelete-profilereset-profile);請直接在節點上進行這些變更。
  • nodeHost.browserProxy.allowProfiles 是選用的。留空以使用舊版/預設行為:所有已設定的設定檔仍可透過代理存取。
  • 如果設定 nodeHost.browserProxy.allowProfiles,OpenClaw 會將其視為最小權限邊界,限制代理會鎖定哪些設定檔名稱。
  • 如果你不想要它,請停用:
    • 在節點上:nodeHost.browserProxy.enabled=false
    • 在閘道上:gateway.nodes.browser.mode="off"(也接受 "auto" 以選取單一已連線瀏覽器節點,或 "manual" 以要求明確的節點參數)

Browserless(託管遠端 CDP)

Browserless 是一項託管 Chromium 服務,透過 HTTPS 和 WebSocket 公開 CDP 連線 URL。OpenClaw 可以使用任一形式,但 對於遠端瀏覽器設定檔,最簡單的選項是 Browserless 連線文件中的直接 WebSocket URL。 範例:
{
  browser: {
    enabled: true,
    defaultProfile: "browserless",
    remoteCdpTimeoutMs: 2000,
    remoteCdpHandshakeTimeoutMs: 4000,
    profiles: {
      browserless: {
        cdpUrl: "wss://production-sfo.browserless.io?token=<BROWSERLESS_API_KEY>",
        color: "#00AA00",
      },
    },
  },
}
注意事項:
  • <BROWSERLESS_API_KEY> 替換為你的真實 Browserless 權杖。
  • 選擇符合你 Browserless 帳戶的區域端點(請參閱其文件)。
  • 如果 Browserless 提供 HTTPS 基礎 URL,你可以將它轉換為 wss:// 以進行直接 CDP 連線,或保留 HTTPS URL 並讓 OpenClaw 探索 /json/version

同一主機上的 Browserless Docker

當 Browserless 在 Docker 中自行託管且 OpenClaw 在主機上執行時,請將 Browserless 視為外部管理的 CDP 服務:
{
  browser: {
    enabled: true,
    defaultProfile: "browserless",
    profiles: {
      browserless: {
        cdpUrl: "ws://127.0.0.1:3000",
        attachOnly: true,
        color: "#00AA00",
      },
    },
  },
}
browser.profiles.browserless.cdpUrl 中的位址必須能從 OpenClaw 程序連線。Browserless 也必須宣告相符且可連線的端點;將 Browserless 的 EXTERNAL 設為相同的公開到 OpenClaw WebSocket 基底,例如 ws://127.0.0.1:3000ws://browserless:3000,或穩定的私人 Docker 網路位址。如果 /json/version 回傳的 webSocketDebuggerUrl 指向 OpenClaw 無法連線的位址,CDP HTTP 可能看起來正常,但 WebSocket 附加仍會失敗。 不要讓回環 Browserless 設定檔的 attachOnly 保持未設定。沒有 attachOnly 時,OpenClaw 會把回環連接埠視為本機受管理的瀏覽器設定檔,並可能回報該連接埠正在使用中但不屬於 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 後援。
  • 直接 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/... 路徑(例如 BrowserlessBrowserbase)。OpenClaw 會先嘗試 HTTP /json/version 探索(將配置標準化為 http/https);如果探索回傳 webSocketDebuggerUrl,就會使用它,否則 OpenClaw 會退回到裸根目錄的直接 WebSocket 交握。如果宣告的 WebSocket 端點拒絕 CDP 交握,但設定的裸根目錄接受它,OpenClaw 也會退回到該根目錄。這讓指向本機 Chrome 的裸 ws:// 仍可連線,因為 Chrome 只接受 /json/version 中特定每目標路徑上的 WebSocket 升級,而託管提供者在其探索端點宣告不適合 Playwright CDP 的短效 URL 時,仍可使用其根 WebSocket 端點。
openclaw browser doctor 使用與執行階段附加相同的先探索、WebSocket 後援邏輯,因此成功連線的裸根 URL 不會被診斷回報為無法連線。

Browserbase

Browserbase 是一個雲端平台,用於執行具備內建 CAPTCHA 解決、隱身模式與住宅代理的無頭瀏覽器。
{
  browser: {
    enabled: true,
    defaultProfile: "browserbase",
    remoteCdpTimeoutMs: 3000,
    remoteCdpHandshakeTimeoutMs: 5000,
    profiles: {
      browserbase: {
        cdpUrl: "wss://connect.browserbase.com?apiKey=<BROWSERBASE_API_KEY>",
        color: "#F97316",
      },
    },
  },
}
注意事項:
  • 註冊並從總覽儀表板複製你的 API Key
  • <BROWSERBASE_API_KEY> 替換為你的實際 Browserbase API 金鑰。
  • Browserbase 會在 WebSocket 連線時自動建立瀏覽器工作階段,因此不需要手動建立工作階段。
  • 如需目前免費層級限制與付費方案,請參閱定價
  • 如需完整 API 參考、SDK 指南與整合範例,請參閱 Browserbase 文件

Notte

Notte 是一個雲端平台,用於執行具備內建隱身、住宅代理與 CDP 原生 WebSocket 閘道的無頭瀏覽器。
{
  browser: {
    enabled: true,
    defaultProfile: "notte",
    remoteCdpTimeoutMs: 3000,
    remoteCdpHandshakeTimeoutMs: 5000,
    profiles: {
      notte: {
        cdpUrl: "wss://us-prod.notte.cc/sessions/connect?token=<NOTTE_API_KEY>",
        color: "#7C3AED",
      },
    },
  },
}
注意事項:
  • 註冊並從主控台設定頁面複製你的 API Key
  • <NOTTE_API_KEY> 替換為你的實際 Notte API 金鑰。
  • Notte 會在 WebSocket 連線時自動建立瀏覽器工作階段,因此不需要手動建立工作階段。工作階段會在 WebSocket 中斷連線時銷毀。
  • 如需目前免費層級限制與付費方案,請參閱定價
  • 如需完整 API 參考、SDK 指南與整合範例,請參閱 Notte 文件

安全性

重點概念:
  • 瀏覽器控制僅限回環;存取會透過閘道的驗證或節點配對流動。
  • 獨立回環瀏覽器 HTTP API 僅使用共享密鑰驗證: 閘道權杖承載驗證、x-openclaw-password,或使用已設定閘道密碼的 HTTP Basic 驗證。
  • Tailscale Serve 身分標頭與 gateway.auth.mode: "trusted-proxy" 不會驗證這個獨立回環瀏覽器 API。
  • 如果已啟用瀏覽器控制且未設定共享密鑰驗證,OpenClaw 會在啟動時自動產生並保存瀏覽器控制憑證: 當 gateway.auth.modenone 時是權杖,或當其為 trusted-proxy 時是密碼(透過 gateway.auth.password 保存,使程序外回環用戶端可解析)。當該模式已明確設定字串憑證,或當 gateway.auth.modepassword 時,會略過自動產生。
  • 如果你想要由自己控制的穩定密鑰,而不是產生的密鑰,請明確設定 gateway.auth.tokengateway.auth.passwordOPENCLAW_GATEWAY_TOKENOPENCLAW_GATEWAY_PASSWORD
遠端 CDP 提示:
  • 盡可能偏好加密端點(HTTPS 或 WSS)與短效權杖。
  • 避免將長效權杖直接嵌入設定檔。
  • 將閘道與任何節點主機保留在私人網路(Tailscale)上;避免公開暴露。
  • 將遠端 CDP URL/權杖視為密鑰;偏好使用環境變數或密鑰管理工具。

設定檔(多瀏覽器)

OpenClaw 支援多個具名設定檔(路由設定)。設定檔可以是:
  • openclaw-managed:具有專屬使用者資料目錄 + CDP 連接埠的專用 Chromium 型瀏覽器執行個體
  • remote:明確的 CDP URL(在其他地方執行的 Chromium 型瀏覽器)
  • existing session:透過 Chrome DevTools MCP 自動連線到你現有的 Chrome 設定檔
預設值:
  • 如果缺少 openclaw 設定檔,會自動建立。
  • user 設定檔內建用於 Chrome MCP 現有工作階段附加。
  • 除了 user 之外,現有工作階段設定檔都需明確選用;使用 --driver existing-session 建立。
  • 本機 CDP 連接埠預設從 18800-18899 分配。
  • 刪除設定檔會將其本機資料目錄移到垃圾桶。
所有控制端點都接受 ?profile=<name>;命令列介面使用 --browser-profile

透過 Chrome DevTools MCP 使用現有工作階段

OpenClaw 也可以透過官方 Chrome DevTools MCP 伺服器附加到正在執行的 Chromium 型瀏覽器設定檔。這會重用該瀏覽器設定檔中已開啟的分頁與登入狀態。 官方背景與設定參考: 內建設定檔:user。如果你想要不同名稱、顏色或瀏覽器資料目錄,請建立自己的自訂現有工作階段設定檔。 預設情況下,內建的 user 設定檔會使用 Chrome MCP 自動連線,目標是預設的本機 Google Chrome 設定檔。若要使用 Brave、Edge、Chromium 或非預設 Chrome 設定檔,請使用 userDataDir~ 會展開為你的作業系統家目錄:
{
  browser: {
    profiles: {
      brave: {
        driver: "existing-session",
        attachOnly: true,
        userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser",
        color: "#FB542B",
      },
    },
  },
}
然後在相符的瀏覽器中:
  1. 開啟該瀏覽器用於遠端偵錯的檢查頁面。
  2. 啟用遠端偵錯。
  3. 保持瀏覽器執行,並在 OpenClaw 附加時核准連線提示。
常見檢查頁面:
  • Chrome:chrome://inspect/#remote-debugging
  • Brave:brave://inspect/#remote-debugging
  • Edge:edge://inspect/#remote-debugging
即時附加煙霧測試:
openclaw browser --browser-profile user start
openclaw browser --browser-profile user status
openclaw browser --browser-profile user tabs
openclaw browser --browser-profile user snapshot --format ai
成功時會看到:
  • status 顯示 driver: existing-session
  • status 顯示 transport: chrome-mcp
  • status 顯示 running: true
  • tabs 列出你已開啟的瀏覽器分頁
  • snapshot 從選取的即時分頁回傳 refs
如果附加無法運作,請檢查:
  • 目標 Chromium 型瀏覽器版本為 144+
  • 該瀏覽器的檢查頁面已啟用遠端偵錯
  • 瀏覽器已顯示附加同意提示,且你已接受
  • 如果 Chrome 是使用明確的 --remote-debugging-port 啟動,請將 browser.profiles.<name>.cdpUrl 設為該 DevTools 端點,而不是依賴 Chrome MCP 自動連線
  • openclaw doctor 會遷移舊的外掛型瀏覽器設定,並檢查預設自動連線設定檔是否已在本機安裝 Chrome,但它無法替你啟用瀏覽器端遠端偵錯
代理程式使用:
  • 當你需要使用者已登入的瀏覽器狀態時,使用 profile="user"
  • 如果你使用自訂現有工作階段設定檔,請傳入該明確設定檔名稱。
  • 只有在使用者位於電腦前可核准附加提示時,才選擇此模式。
  • 閘道或節點主機可以產生 npx chrome-devtools-mcp@latest --autoConnect
注意事項:
  • 此路徑比隔離的 openclaw 設定檔風險更高,因為它可以在你已登入的瀏覽器工作階段中操作。
  • OpenClaw 不會為此驅動程式啟動瀏覽器;它只會附加。
  • OpenClaw 在此使用官方 Chrome DevTools MCP --autoConnect 流程。如果已設定 userDataDir,它會被傳遞以鎖定該使用者資料目錄。
  • 現有工作階段可在選取的主機上附加,或透過已連線的瀏覽器節點附加。如果 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 會附加到端點後方正在執行的瀏覽器,而不是開啟設定檔目錄。
與受管理的 openclaw 設定檔相比,現有工作階段驅動程式限制更多:
  • 螢幕截圖 - 支援頁面擷取和 --ref 元素擷取;不支援 CSS --element 選擇器。頁面或基於 ref 的元素螢幕截圖不需要 Playwright。(在任何 profile 上,--full-page 都不能與 --ref--element 結合使用,不只是 existing-session。)
  • 動作 - clicktypehoverscrollIntoViewdragselect 需要 snapshot refs(不支援 CSS 選擇器)。click-coords 會點擊可見 viewport 座標,且不需要 snapshot ref。click 僅限左鍵(不支援按鈕覆寫或修飾鍵)。type 不支援 slowly=true;請使用 fillpresspress 不支援 delayMstypehoverscrollIntoViewdragselectfillevaluate 不支援每次呼叫的 timeoutMs 覆寫。select 接受單一值。不支援 batch;請個別傳送動作。
  • 等待 / 上傳 / 對話框 - wait --url 支援精確、子字串和 glob 模式(與 managed 相同);existing-session profile 不支援 wait --load networkidle(managed 和 raw/remote CDP profile 可用)。上傳 hook 需要 refinputRef,一次一個檔案,不支援 CSS element。對話框 hook 不支援逾時覆寫或 dialogId
  • 對話框可見性 - 當動作開啟 modal dialog 時,Managed browser 動作回應會包含 blockedByDialogbrowserState.dialogs.pending;snapshot 也會包含待處理的對話框狀態。在對話框待處理時,以 browser dialog --accept/--dismiss --dialog-id <id> 回應。在 OpenClaw 外部處理的對話框會出現在 browserState.dialogs.recent 下。
  • 僅限 managed 的功能 - PDF 匯出、下載攔截和 responsebody 仍需要 managed browser 路徑。

隔離保證

  • 專用使用者資料目錄:絕不觸碰你的個人瀏覽器 profile。
  • 專用連接埠:避免使用 9222,防止與開發工作流程衝突。
  • 確定性的分頁控制tabs 會先回傳 suggestedTargetId,接著回傳 穩定的 tabId handle(例如 t1)、可選標籤,以及原始 targetId。 Agent 應重複使用 suggestedTargetId;原始 id 仍可用於 偵錯和相容性。

瀏覽器選擇

在本機啟動時,OpenClaw 會選擇第一個可用項目:
  1. Chrome
  2. Brave
  3. Edge
  4. Chromium
  5. 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(可選)

為了 scripting 和偵錯,Gateway 會公開一個小型的僅限 loopback 的 HTTP 控制 API,以及對應的 openclaw browser 命令列介面(snapshot、refs、wait power-ups、JSON 輸出、偵錯工作流程)。完整參考請見 瀏覽器控制 API

疑難排解

Linux 特定問題(尤其是 snap Chromium)請見 瀏覽器疑難排解 WSL2 Gateway + Windows Chrome split-host 設定請見 WSL2 + Windows + remote Chrome CDP 疑難排解

CDP 啟動失敗與導覽 SSRF 封鎖

這些是不同的失敗類型,且指向不同的程式碼路徑。
  • CDP 啟動或就緒失敗表示 OpenClaw 無法確認瀏覽器控制平面是健康的。
  • 導覽 SSRF 封鎖表示瀏覽器控制平面是健康的,但頁面導覽目標被政策拒絕。
常見範例:
  • CDP 啟動或就緒失敗:
    • Chrome CDP websocket for profile "openclaw" is not reachable after start
    • Remote CDP for profile "<name>" is not reachable at <cdpUrl>
    • 當設定 loopback external CDP service 且未使用 attachOnly: true 時,Port <port> is in use for profile "<name>" but not by openclaw
  • 導覽 SSRF 封鎖:
    • opennavigate、snapshot 或開啟分頁流程在 starttabs 仍可運作時,因瀏覽器/網路政策錯誤而失敗
使用這個最小序列來區分兩者:
openclaw browser --browser-profile openclaw start
openclaw browser --browser-profile openclaw tabs
openclaw browser --browser-profile openclaw open https://example.com
如何解讀結果:
  • 如果 startnot reachable after start 失敗,請先排查 CDP 就緒狀態。
  • 如果 start 成功但 tabs 失敗,控制平面仍不健康。將此視為 CDP 可達性問題,而不是頁面導覽問題。
  • 如果 starttabs 成功但 opennavigate 失敗,瀏覽器控制平面已啟動,失敗原因在導覽政策或目標頁面。
  • 如果 starttabsopen 全部成功,基本的 managed-browser 控制路徑是健康的。
重要行為細節:
  • 即使你未設定 browser.ssrfPolicy,瀏覽器設定也會預設為 fail-closed SSRF policy object。
  • 對於本機 local loopback openclaw managed profile,CDP 健康檢查會刻意略過 OpenClaw 自己本機控制平面的瀏覽器 SSRF 可達性強制檢查。
  • 導覽保護是分開的。成功的 starttabs 結果不代表之後的 opennavigate 目標會被允許。
安全指引:
  • 預設不要放寬瀏覽器 SSRF 政策。
  • 優先使用範圍狹窄的 host 例外,例如 hostnameAllowlistallowedHostnames,而不是廣泛的 private-network access。
  • 只有在有意信任、需要並已審查 private-network browser access 的環境中,才使用 dangerouslyAllowPrivateNetwork: true

Agent 工具 + 控制如何運作

Agent 會取得一個工具用於瀏覽器自動化:
  • browser - doctor/status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
對應方式:
  • browser snapshot 會回傳穩定的 UI tree(AI 或 ARIA)。
  • browser act 使用 snapshot ref ID 來 click/type/drag/select。
  • browser screenshot 擷取像素(整頁、元素或有標籤的 refs)。
  • browser doctor 檢查 Gateway、外掛、profile、瀏覽器和分頁就緒狀態。
  • browser 接受:
    • profile 用來選擇具名瀏覽器 profile(openclaw、chrome 或 remote CDP)。
    • target (sandbox | host | node) 用來選擇瀏覽器所在位置。
    • 在 sandboxed sessions 中,target: "host" 需要 agents.defaults.sandbox.browser.allowHostControl=true
    • 如果省略 target:sandboxed sessions 預設為 sandbox,non-sandbox sessions 預設為 host
    • 如果已連線具備瀏覽器能力的節點,工具可能會自動路由到該節點,除非你指定 target="host"target="node"
這能讓 Agent 保持確定性,並避免脆弱的選擇器。

相關