Tools
เบราว์เซอร์ (จัดการโดย OpenClaw)
OpenClaw สามารถเรียกใช้ โปรไฟล์ Chrome/Brave/Edge/Chromium เฉพาะ ที่เอเจนต์ควบคุมได้ โปรไฟล์นี้แยกออกจากเบราว์เซอร์ส่วนตัวของคุณ และจัดการผ่านบริการควบคุมภายในเครื่องขนาดเล็ก ใน Gateway (เฉพาะ loopback เท่านั้น)
มุมมองสำหรับผู้เริ่มต้น:
- ให้คิดว่าเป็น เบราว์เซอร์แยกต่างหากสำหรับเอเจนต์เท่านั้น
- โปรไฟล์
openclawจะ ไม่ แตะโปรไฟล์เบราว์เซอร์ส่วนตัวของคุณ - เอเจนต์สามารถ เปิดแท็บ อ่านหน้า คลิก และพิมพ์ ในช่องทางที่ปลอดภัย
- โปรไฟล์
userในตัวจะแนบกับเซสชัน Chrome จริงที่ลงชื่อเข้าใช้แล้วของคุณผ่าน Chrome MCP
สิ่งที่คุณจะได้
- โปรไฟล์เบราว์เซอร์แยกต่างหากชื่อ openclaw (ค่าเริ่มต้นใช้สีเน้นสีส้ม)
- การควบคุมแท็บแบบกำหนดผลได้แน่นอน (แสดงรายการ/เปิด/โฟกัส/ปิด)
- การทำงานของเอเจนต์ (คลิก/พิมพ์/ลาก/เลือก), สแนปช็อต, ภาพหน้าจอ, PDF
- skill
browser-automationที่บันเดิลมา ซึ่งสอนเอเจนต์เรื่องสแนปช็อต, แท็บที่เสถียร, ref ที่หมดอายุ, และลูปกู้คืนเมื่อมีตัวบล็อกที่ต้องทำเอง เมื่อเปิดใช้งาน Plugin เบราว์เซอร์ - รองรับหลายโปรไฟล์แบบเลือกได้ (
openclaw,work,remote, ...)
เบราว์เซอร์นี้ ไม่ใช่ เบราว์เซอร์ที่คุณใช้ประจำวัน แต่เป็นพื้นผิวที่ปลอดภัยและแยกโดดเดี่ยวสำหรับ การทำงานอัตโนมัติและการตรวจสอบของเอเจนต์
เริ่มต้นอย่างรวดเร็ว
openclaw browser --browser-profile openclaw doctoropenclaw browser --browser-profile openclaw doctor --deepopenclaw browser --browser-profile openclaw statusopenclaw browser --browser-profile openclaw startopenclaw browser --browser-profile openclaw open https://example.comopenclaw browser --browser-profile openclaw snapshotหากคุณได้รับข้อความ "Browser disabled" ให้เปิดใช้งานในคอนฟิก (ดูด้านล่าง) แล้วรีสตาร์ท Gateway
หาก openclaw browser หายไปทั้งคำสั่ง หรือเอเจนต์บอกว่าเครื่องมือเบราว์เซอร์
ใช้งานไม่ได้ ให้ข้ามไปที่ คำสั่งหรือเครื่องมือเบราว์เซอร์หายไป
การควบคุม Plugin
เครื่องมือ browser ค่าเริ่มต้นเป็น Plugin ที่บันเดิลมา ปิดใช้งานเพื่อแทนที่ด้วย Plugin อื่นที่ลงทะเบียนชื่อเครื่องมือ browser เดียวกัน:
{ plugins: { entries: { browser: { enabled: false, }, }, },}ค่าเริ่มต้นต้องมีทั้ง plugins.entries.browser.enabled และ browser.enabled=true การปิดใช้งานเฉพาะ Plugin จะลบ CLI openclaw browser, เมธอด Gateway browser.request, เครื่องมือเอเจนต์, และบริการควบคุมออกเป็นหน่วยเดียวกัน ส่วนคอนฟิก browser.* ของคุณจะยังคงอยู่เพื่อใช้กับตัวแทนที่มาแทน
การเปลี่ยนคอนฟิกเบราว์เซอร์ต้องรีสตาร์ท Gateway เพื่อให้ Plugin ลงทะเบียนบริการอีกครั้ง
แนวทางสำหรับเอเจนต์
หมายเหตุเกี่ยวกับโปรไฟล์เครื่องมือ: tools.profile: "coding" รวม web_search และ
web_fetch แต่ไม่ได้รวมเครื่องมือ browser แบบเต็ม หากเอเจนต์หรือ
ซับเอเจนต์ที่ถูกสร้างควรใช้การทำงานอัตโนมัติของเบราว์เซอร์ ให้เพิ่ม browser ในขั้นโปรไฟล์:
{ tools: { profile: "coding", alsoAllow: ["browser"], },}สำหรับเอเจนต์เดียว ให้ใช้ agents.list[].tools.alsoAllow: ["browser"]
tools.subagents.tools.allow: ["browser"] เพียงอย่างเดียวไม่พอ เพราะนโยบายซับเอเจนต์
จะถูกใช้หลังจากการกรองโปรไฟล์แล้ว
Plugin เบราว์เซอร์มาพร้อมแนวทางสำหรับเอเจนต์สองระดับ:
- คำอธิบายเครื่องมือ
browserมีสัญญาแบบย่อที่เปิดใช้เสมอ: เลือก โปรไฟล์ที่ถูกต้อง, รักษา refs ให้อยู่ในแท็บเดียวกัน, ใช้tabId/ป้ายกำกับสำหรับการระบุเป้าหมาย แท็บ, และโหลด skill เบราว์เซอร์สำหรับงานหลายขั้นตอน - skill
browser-automationที่บันเดิลมามีลูปการทำงานที่ยาวกว่า: ตรวจสถานะ/แท็บก่อน, ติดป้ายกำกับแท็บของงาน, ทำสแนปช็อตก่อนดำเนินการ, ทำสแนปช็อตใหม่ หลัง UI เปลี่ยน, กู้คืน refs ที่หมดอายุหนึ่งครั้ง, และรายงานตัวบล็อกการเข้าสู่ระบบ/2FA/captcha หรือ กล้อง/ไมโครโฟนเป็นการดำเนินการด้วยตนเองแทนการเดา
Skills ที่บันเดิลกับ Plugin จะแสดงใน Skills ที่เอเจนต์ใช้ได้เมื่อเปิดใช้งาน Plugin คำสั่งฉบับเต็มของ skill จะโหลดเมื่อจำเป็น ดังนั้นเทิร์นปกติ จึงไม่ต้องเสียต้นทุนโทเค็นเต็มจำนวน
คำสั่งหรือเครื่องมือเบราว์เซอร์หายไป
หาก openclaw browser ไม่รู้จักหลังอัปเกรด, browser.request หายไป, หรือเอเจนต์รายงานว่าเครื่องมือเบราว์เซอร์ใช้งานไม่ได้ สาเหตุทั่วไปคือรายการ plugins.allow ที่ละเว้น browser และไม่มีบล็อกคอนฟิกราก browser ให้เพิ่มดังนี้:
{ plugins: { allow: ["telegram", "browser"], },}บล็อก browser ที่รากอย่างชัดเจน เช่น browser.enabled=true หรือ browser.profiles.<name> จะเปิดใช้งาน Plugin เบราว์เซอร์ที่บันเดิลมา แม้อยู่ภายใต้ plugins.allow ที่จำกัด โดยสอดคล้องกับพฤติกรรมคอนฟิกช่องทาง plugins.entries.browser.enabled=true และ tools.alsoAllow: ["browser"] ไม่สามารถใช้แทนการเป็นสมาชิก allowlist ได้ด้วยตัวเอง การลบ plugins.allow ออกทั้งหมดจะคืนค่าเริ่มต้นเช่นกัน
โปรไฟล์: openclaw เทียบกับ user
openclaw: เบราว์เซอร์ที่จัดการและแยกโดดเดี่ยว (ไม่ต้องมีส่วนขยาย)user: โปรไฟล์แนบ Chrome MCP ในตัวสำหรับเซสชัน Chrome จริงที่ลงชื่อเข้าใช้แล้ว ของคุณ
สำหรับการเรียกเครื่องมือเบราว์เซอร์ของเอเจนต์:
- ค่าเริ่มต้น: ใช้เบราว์เซอร์
openclawที่แยกโดดเดี่ยว - ควรใช้
profile="user"เมื่อเซสชันที่ล็อกอินอยู่มีความสำคัญ และผู้ใช้ อยู่ที่คอมพิวเตอร์เพื่อคลิก/อนุมัติพรอมป์แนบใด ๆ profileเป็นการ override อย่างชัดเจนเมื่อคุณต้องการโหมดเบราว์เซอร์เฉพาะ
ตั้งค่า browser.defaultProfile: "openclaw" หากคุณต้องการใช้โหมดที่จัดการเป็นค่าเริ่มต้น
การกำหนดค่า
การตั้งค่าเบราว์เซอร์อยู่ใน ~/.openclaw/openclaw.json
{ browser: { enabled: true, // default: true ssrfPolicy: { // dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access // allowPrivateNetwork: true, // legacy alias // 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, }, 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" }, }, },}วิชันภาพหน้าจอ (รองรับโมเดลข้อความเท่านั้น)
เมื่อโมเดลหลักเป็นแบบข้อความเท่านั้น (ไม่รองรับวิชัน/มัลติโมดัล) ภาพหน้าจอของเบราว์เซอร์ จะคืนบล็อกรูปภาพที่โมเดลอ่านไม่ได้ ภาพหน้าจอของเบราว์เซอร์ ใช้การกำหนดค่าการทำความเข้าใจรูปภาพที่มีอยู่ซ้ำ ดังนั้นโมเดลรูปภาพ ที่กำหนดค่าไว้สำหรับการทำความเข้าใจสื่อจึงสามารถบรรยายภาพหน้าจอเป็นข้อความได้โดยไม่ต้องมี การตั้งค่าโมเดลเฉพาะเบราว์เซอร์
{ 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" }, }, },}วิธีทำงาน:
- เอเจนต์เรียก
browser screenshot→ จับภาพไปยังดิสก์ตามปกติ - เครื่องมือเบราว์เซอร์ถาม runtime การทำความเข้าใจรูปภาพที่มีอยู่ว่า สามารถบรรยายภาพหน้าจอโดยใช้โมเดลรูปภาพสื่อที่กำหนดค่าไว้, โมเดลสื่อที่ใช้ร่วมกัน, ค่าเริ่มต้นโมเดลรูปภาพ, หรือผู้ให้บริการรูปภาพที่มี auth รองรับได้หรือไม่
- โมเดลวิชันคืนคำบรรยายข้อความ ซึ่งถูกห่อด้วย
wrapExternalContent(ตัวป้องกัน prompt injection) และคืนให้เอเจนต์ เป็นบล็อกข้อความแทนบล็อกรูปภาพ - หากการทำความเข้าใจรูปภาพใช้งานไม่ได้, ถูกข้าม, หรือทำงานล้มเหลว เบราว์เซอร์จะถอยกลับ ไปคืนบล็อกรูปภาพเดิม
ใช้ฟิลด์ tools.media.image / tools.media.models ที่มีอยู่สำหรับ
fallback ของโมเดล, timeout, ขีดจำกัดไบต์, โปรไฟล์, และการตั้งค่าคำขอผู้ให้บริการ
หากโมเดลหลักที่ใช้งานอยู่รองรับวิชันอยู่แล้วและไม่มีโมเดลการทำความเข้าใจรูปภาพ ที่กำหนดค่าไว้อย่างชัดเจน OpenClaw จะคงผลลัพธ์รูปภาพแบบปกติไว้ เพื่อให้ โมเดลหลักอ่านภาพหน้าจอได้โดยตรง
พอร์ตและการเข้าถึงได้
- บริการควบคุม bind กับ loopback บนพอร์ตที่คำนวณจาก
gateway.port(ค่าเริ่มต้น18791= gateway + 2) การ overridegateway.portหรือOPENCLAW_GATEWAY_PORTจะเลื่อนพอร์ตที่คำนวณได้ในตระกูลเดียวกัน - โปรไฟล์
openclawภายในเครื่องจะกำหนดcdpPort/cdpUrlอัตโนมัติ ตั้งค่าเหล่านี้เฉพาะสำหรับ โปรไฟล์ CDP ระยะไกลหรือการแนบ endpoint ของเซสชันที่มีอยู่cdpUrlจะใช้ค่าเริ่มต้นเป็น พอร์ต CDP ภายในเครื่องที่จัดการไว้เมื่อไม่ได้ตั้งค่า remoteCdpTimeoutMsใช้กับการตรวจการเข้าถึงได้ของ HTTP สำหรับ CDP ระยะไกลและattachOnlyรวมถึงคำขอ HTTP เพื่อเปิดแท็บ;remoteCdpHandshakeTimeoutMsใช้กับ การ handshake ของ CDP WebSocket สำหรับกรณีเหล่านั้นlocalLaunchTimeoutMsคือ budget สำหรับโปรเซส Chrome ที่จัดการและเปิดภายในเครื่อง เพื่อเผย endpoint HTTP ของ CDPlocalCdpReadyTimeoutMsคือ budget ถัดไปสำหรับความพร้อมของ websocket CDP หลังค้นพบโปรเซสแล้ว เพิ่มค่าเหล่านี้บน Raspberry Pi, VPS ระดับล่าง, หรือฮาร์ดแวร์เก่าที่ Chromium เริ่มทำงานช้า ค่าต้องเป็นจำนวนเต็มบวกไม่เกิน120000ms; ค่า คอนฟิกที่ไม่ถูกต้องจะถูกปฏิเสธ- ความล้มเหลวซ้ำ ๆ ในการเปิด/รอความพร้อมของ Chrome ที่จัดการจะถูกตัดวงจรแยกตาม โปรไฟล์ หลังเกิดความล้มเหลวติดต่อกันหลายครั้ง OpenClaw จะหยุดความพยายามเปิดใหม่ ชั่วครู่ แทนที่จะ spawn Chromium ทุกครั้งที่เรียกเครื่องมือเบราว์เซอร์ ให้แก้ ปัญหาเริ่มต้น, ปิดใช้งานเบราว์เซอร์หากไม่จำเป็น, หรือรีสตาร์ท Gateway หลังซ่อมแซม
actionTimeoutMsคือ budget ค่าเริ่มต้นสำหรับคำขอactของเบราว์เซอร์เมื่อผู้เรียกไม่ได้ส่งtimeoutMsไคลเอนต์ transport จะเพิ่มหน้าต่างผ่อนปรนเล็กน้อยเพื่อให้การรอนานสามารถจบได้แทนที่จะ timeout ที่ขอบเขต HTTPtabCleanupคือการล้างแท็บแบบพยายามให้ดีที่สุดสำหรับแท็บที่เปิดโดยเซสชันเบราว์เซอร์ของเอเจนต์หลัก การล้างตามวงจรชีวิตของซับเอเจนต์, cron, และ ACP ยังคงปิดแท็บที่ติดตามไว้อย่างชัดเจนเมื่อจบเซสชัน; เซสชันหลักจะคงแท็บที่ใช้งานอยู่ให้ใช้ซ้ำได้ แล้วจึงปิดแท็บที่ติดตามซึ่ง idle หรือเกินจำนวนในพื้นหลัง
นโยบาย SSRF
- การนำทางของเบราว์เซอร์และการเปิดแท็บถูกป้องกัน SSRF ก่อนนำทาง และตรวจซ้ำแบบ best-effort กับ URL
http(s)สุดท้ายหลังจากนั้น - ในโหมด SSRF แบบเข้มงวด การค้นหา endpoint ของ CDP ระยะไกลและ probe
/json/version(cdpUrl) จะถูกตรวจด้วย - ตัวแปรสภาพแวดล้อม
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYและNO_PROXYของ Gateway/provider จะไม่ proxy เบราว์เซอร์ที่ OpenClaw จัดการโดยอัตโนมัติ Chrome ที่จัดการจะเปิดแบบ direct เป็นค่าเริ่มต้น เพื่อให้การตั้งค่า proxy ของ provider ไม่ทำให้การตรวจ SSRF ของเบราว์เซอร์อ่อนลง - probe ความพร้อมของ CDP ใน local ที่ OpenClaw จัดการ และการเชื่อมต่อ DevTools WebSocket จะข้าม proxy เครือข่ายที่จัดการสำหรับ endpoint loopback ที่เปิดขึ้นมานั้นโดยตรง ดังนั้น
openclaw browser startยังทำงานได้เมื่อ proxy ของผู้ปฏิบัติงานบล็อก loopback egress - หากต้องการ proxy เบราว์เซอร์ที่จัดการเอง ให้ส่ง flag proxy ของ Chrome อย่างชัดเจนผ่าน
browser.extraArgsเช่น--proxy-server=...หรือ--proxy-pac-url=...โหมด SSRF แบบเข้มงวดจะบล็อกการกำหนดเส้นทาง proxy ของเบราว์เซอร์อย่างชัดเจน เว้นแต่จะเปิดใช้งานการเข้าถึงเบราว์เซอร์บนเครือข่ายส่วนตัวโดยตั้งใจ browser.ssrfPolicy.dangerouslyAllowPrivateNetworkปิดเป็นค่าเริ่มต้น เปิดใช้เฉพาะเมื่อเชื่อถือการเข้าถึงเบราว์เซอร์บนเครือข่ายส่วนตัวโดยตั้งใจเท่านั้นbrowser.ssrfPolicy.allowPrivateNetworkยังรองรับในฐานะ alias เดิม
พฤติกรรมของโปรไฟล์
attachOnly: trueหมายถึงไม่เปิดเบราว์เซอร์ local เลย และจะ attach เฉพาะเมื่อมีเบราว์เซอร์กำลังทำงานอยู่แล้ว- สามารถตั้งค่า
headlessได้ทั้งแบบ global หรือแยกตามโปรไฟล์ local ที่จัดการ ค่าแยกตามโปรไฟล์จะแทนที่browser.headlessดังนั้นโปรไฟล์ที่เปิดใน local หนึ่งรายการสามารถคงเป็น headless ได้ ขณะที่อีกรายการยังมองเห็นได้ POST /start?headless=trueและopenclaw browser start --headlessขอการเปิดแบบ headless ครั้งเดียวสำหรับโปรไฟล์ local ที่จัดการ โดยไม่เขียนค่าbrowser.headlessหรือ config โปรไฟล์ใหม่ โปรไฟล์ existing-session, attach-only และ remote CDP จะปฏิเสธ override นี้ เพราะ OpenClaw ไม่ได้เปิด process เบราว์เซอร์เหล่านั้น- บนโฮสต์ Linux ที่ไม่มี
DISPLAYหรือWAYLAND_DISPLAYโปรไฟล์ local ที่จัดการ จะตั้งค่าเริ่มต้นเป็น headless โดยอัตโนมัติเมื่อทั้งสภาพแวดล้อมและ config โปรไฟล์/global ไม่ได้เลือกโหมด headed อย่างชัดเจนopenclaw browser status --jsonรายงานheadlessSourceเป็นenv,profile,config,request,linux-display-fallbackหรือdefault OPENCLAW_BROWSER_HEADLESS=1บังคับให้การเปิด local ที่จัดการเป็น headless สำหรับ process ปัจจุบันOPENCLAW_BROWSER_HEADLESS=0บังคับโหมด headed สำหรับการ start ทั่วไป และส่งคืนข้อผิดพลาดที่ดำเนินการต่อได้บนโฮสต์ Linux ที่ไม่มี display server; คำขอstart --headlessอย่างชัดเจนยังมีผลเหนือกว่าสำหรับการเปิดครั้งเดียวนั้น- สามารถตั้งค่า
executablePathได้ทั้งแบบ global หรือแยกตามโปรไฟล์ local ที่จัดการ ค่าแยกตามโปรไฟล์จะแทนที่browser.executablePathดังนั้นโปรไฟล์ที่จัดการต่างกันสามารถเปิดเบราว์เซอร์ที่อิง Chromium คนละตัวได้ ทั้งสองรูปแบบรับ~สำหรับไดเรกทอรี home ของ OS คุณ color(ทั้ง top-level และแยกตามโปรไฟล์) ย้อมสี UI ของเบราว์เซอร์เพื่อให้เห็นว่าโปรไฟล์ใดกำลังใช้งานอยู่- โปรไฟล์เริ่มต้นคือ
openclaw(standalone ที่จัดการ) ใช้defaultProfile: "user"เพื่อเลือกใช้เบราว์เซอร์ผู้ใช้ที่ลงชื่อเข้าใช้อยู่ - ลำดับการตรวจหาอัตโนมัติ: เบราว์เซอร์เริ่มต้นของระบบหากอิง Chromium; ไม่เช่นนั้น Chrome → Brave → Edge → Chromium → Chrome Canary
driver: "existing-session"ใช้ Chrome DevTools MCP แทน CDP ดิบ สามารถ attach ผ่านการ auto-connect ของ Chrome MCP หรือผ่านcdpUrlเมื่อคุณมี DevTools endpoint สำหรับเบราว์เซอร์ที่กำลังทำงานอยู่แล้ว- ตั้งค่า
browser.profiles.<name>.userDataDirเมื่อโปรไฟล์ existing-session ควร attach ไปยังโปรไฟล์ผู้ใช้ Chromium ที่ไม่ใช่ค่าเริ่มต้น (Brave, Edge ฯลฯ) path นี้รับ~สำหรับไดเรกทอรี home ของ OS คุณด้วย
ใช้ Brave หรือเบราว์เซอร์อื่นที่อิง Chromium
หากเบราว์เซอร์ เริ่มต้นของระบบ ของคุณอิง Chromium (Chrome/Brave/Edge/ฯลฯ)
OpenClaw จะใช้โดยอัตโนมัติ ตั้งค่า browser.executablePath เพื่อ override
การตรวจหาอัตโนมัติ ค่า executablePath ทั้ง top-level และแยกตามโปรไฟล์รับ ~
สำหรับไดเรกทอรี home ของ 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"หรือตั้งค่าใน config แยกตาม platform:
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",},}executablePath แยกตามโปรไฟล์มีผลเฉพาะกับโปรไฟล์ local ที่จัดการซึ่ง OpenClaw
เปิดเท่านั้น โปรไฟล์ existing-session จะ attach ไปยังเบราว์เซอร์ที่กำลังทำงานอยู่แล้ว
แทน และโปรไฟล์ remote CDP ใช้เบราว์เซอร์หลัง cdpUrl
การควบคุม local เทียบกับ remote
- การควบคุม local (ค่าเริ่มต้น): Gateway เริ่มบริการควบคุม loopback และสามารถเปิดเบราว์เซอร์ local ได้
- การควบคุม remote (โฮสต์ Node): รันโฮสต์ Node บนเครื่องที่มีเบราว์เซอร์ Gateway จะ proxy การกระทำของเบราว์เซอร์ไปยังโฮสต์นั้น
- Remote CDP: ตั้งค่า
browser.profiles.<name>.cdpUrl(หรือbrowser.cdpUrl) เพื่อ attach ไปยังเบราว์เซอร์ระยะไกลที่อิง Chromium ในกรณีนี้ OpenClaw จะไม่เปิดเบราว์เซอร์ local - สำหรับบริการ CDP ที่จัดการจากภายนอกบน loopback (ตัวอย่างเช่น Browserless ใน
Docker ที่ publish ไปยัง
127.0.0.1) ให้ตั้งค่าattachOnly: trueด้วย CDP แบบ loopback ที่ไม่มีattachOnlyจะถือเป็นโปรไฟล์เบราว์เซอร์ local ที่ OpenClaw จัดการ headlessมีผลเฉพาะกับโปรไฟล์ local ที่จัดการซึ่ง OpenClaw เปิดเท่านั้น ไม่มีการ restart หรือเปลี่ยนเบราว์เซอร์ existing-session หรือ remote CDPexecutablePathใช้กฎโปรไฟล์ local ที่จัดการเดียวกัน การเปลี่ยนค่านี้บน โปรไฟล์ local ที่จัดการซึ่งกำลังทำงานอยู่จะทำเครื่องหมายโปรไฟล์นั้นให้ restart/reconcile เพื่อให้ การเปิดครั้งถัดไปใช้ binary ใหม่
พฤติกรรมการหยุดแตกต่างกันตามโหมดโปรไฟล์:
- โปรไฟล์ local ที่จัดการ:
openclaw browser stopหยุด process เบราว์เซอร์ที่ OpenClaw เปิด - โปรไฟล์ attach-only และ remote CDP:
openclaw browser stopปิด session ควบคุมที่ใช้งานอยู่ และปล่อย override การจำลองของ Playwright/CDP (viewport, color scheme, locale, timezone, offline mode และสถานะที่คล้ายกัน) แม้ว่า OpenClaw จะไม่ได้เปิด process เบราว์เซอร์ก็ตาม
URL ของ Remote CDP สามารถรวม auth ได้:
- Query token (เช่น
https://provider.example?token=<token>) - HTTP Basic auth (เช่น
https://user:pass@provider.example)
OpenClaw จะคง auth ไว้เมื่อเรียก endpoint /json/* และเมื่อเชื่อมต่อ
ไปยัง CDP WebSocket ควรใช้ตัวแปรสภาพแวดล้อมหรือ secrets manager สำหรับ
token แทนการ commit ลงไฟล์ config
Proxy เบราว์เซอร์ของ Node (ค่าเริ่มต้นแบบไม่ต้อง config)
หากคุณรัน โฮสต์ Node บนเครื่องที่มีเบราว์เซอร์ของคุณ OpenClaw สามารถ กำหนดเส้นทางการเรียกเครื่องมือเบราว์เซอร์ไปยัง Node นั้นโดยอัตโนมัติ โดยไม่ต้องมี config เบราว์เซอร์เพิ่มเติม นี่คือ path เริ่มต้นสำหรับ Gateway ระยะไกล
หมายเหตุ:
- โฮสต์ Node เปิดเผยเซิร์ฟเวอร์ควบคุมเบราว์เซอร์ local ผ่าน คำสั่ง proxy
- โปรไฟล์มาจาก config
browser.profilesของ Node เอง (เหมือน local) nodeHost.browserProxy.allowProfilesเป็นตัวเลือกได้ ปล่อยว่างไว้สำหรับพฤติกรรม legacy/default: โปรไฟล์ที่กำหนดค่าไว้ทั้งหมดจะยังเข้าถึงได้ผ่าน proxy รวมถึง route สร้าง/ลบโปรไฟล์- หากคุณตั้งค่า
nodeHost.browserProxy.allowProfilesOpenClaw จะถือค่านี้เป็นขอบเขต least-privilege: สามารถ target ได้เฉพาะโปรไฟล์ใน allowlist และ route สร้าง/ลบโปรไฟล์ถาวรจะถูกบล็อกบนผิวของ proxy - ปิดใช้งานหากคุณไม่ต้องการ:
- บน Node:
nodeHost.browserProxy.enabled=false - บน Gateway:
gateway.nodes.browser.mode="off"
- บน Node:
Browserless (hosted remote CDP)
Browserless เป็นบริการ Chromium แบบ hosted ที่เปิดเผย URL การเชื่อมต่อ CDP ผ่าน HTTPS และ WebSocket OpenClaw ใช้ได้ทั้งสองรูปแบบ แต่ สำหรับโปรไฟล์เบราว์เซอร์ระยะไกล ตัวเลือกที่ง่ายที่สุดคือ URL WebSocket โดยตรง จากเอกสารการเชื่อมต่อของ Browserless
ตัวอย่าง:
{ 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>ด้วย token จริงของ Browserless - เลือก endpoint ของ region ที่ตรงกับบัญชี Browserless ของคุณ (ดูเอกสารของเขา)
- หาก Browserless ให้ HTTPS base URL คุณสามารถแปลงเป็น
wss://สำหรับการเชื่อมต่อ CDP โดยตรง หรือคง URL แบบ HTTPS ไว้แล้วให้ OpenClaw ค้นหา/json/version
Browserless Docker บนโฮสต์เดียวกัน
เมื่อ Browserless self-host ใน 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 ต้องเข้าถึงได้จาก
process ของ OpenClaw Browserless ต้อง advertise endpoint ที่เข้าถึงได้ตรงกันด้วย;
ตั้งค่า EXTERNAL ของ Browserless เป็น WebSocket base แบบ public-to-OpenClaw เดียวกันนั้น เช่น
ws://127.0.0.1:3000, ws://browserless:3000 หรือที่อยู่เครือข่าย Docker
ส่วนตัวที่เสถียร หาก /json/version คืนค่า webSocketDebuggerUrl ที่ชี้ไปยัง
ที่อยู่ที่ OpenClaw เข้าถึงไม่ได้ CDP HTTP อาจดูปกติขณะที่การ attach
ผ่าน WebSocket ยังล้มเหลว
อย่าปล่อยให้ attachOnly ไม่ได้ตั้งค่าสำหรับโปรไฟล์ Browserless แบบ loopback หากไม่มี
attachOnly OpenClaw จะถือ port loopback เป็นโปรไฟล์เบราว์เซอร์
local ที่จัดการ และอาจรายงานว่า port ถูกใช้งานอยู่แต่ไม่ได้เป็นของ OpenClaw
Provider CDP WebSocket โดยตรง
บริการเบราว์เซอร์แบบ hosted บางรายการเปิดเผย endpoint WebSocket โดยตรง แทน
การค้นหา CDP มาตรฐานที่อิง HTTP (/json/version) OpenClaw รับรูปแบบ URL
CDP สามแบบและเลือกกลยุทธ์การเชื่อมต่อที่ถูกต้องโดยอัตโนมัติ:
- การค้นหา HTTP(S) -
http://host[:port]หรือhttps://host[:port]OpenClaw เรียก/json/versionเพื่อค้นหา URL WebSocket debugger แล้วจึง เชื่อมต่อ ไม่มี fallback WebSocket - endpoint WebSocket โดยตรง -
ws://host[:port]/devtools/<kind>/<id>หรือwss://...ที่มี path/devtools/browser|page|worker|shared_worker|service_worker/<id>OpenClaw เชื่อมต่อโดยตรงผ่าน WebSocket handshake และข้าม/json/versionทั้งหมด - Root WebSocket เปล่า -
ws://host[:port]หรือwss://host[:port]ที่ไม่มี path/devtools/...(เช่น Browserless, Browserbase) OpenClaw จะลองค้นหา HTTP/json/versionก่อน (normalise scheme เป็นhttp/https); หากการค้นหาคืนค่าwebSocketDebuggerUrlจะใช้ค่านั้น มิฉะนั้น OpenClaw fallback ไปใช้ WebSocket handshake โดยตรงที่ root เปล่า หาก endpoint WebSocket ที่ advertise ปฏิเสธ CDP handshake แต่ root เปล่าที่กำหนดค่าไว้ ยอมรับ OpenClaw จะ fallback ไปยัง root นั้นด้วย วิธีนี้ทำให้ws://เปล่า ที่ชี้ไปยัง Chrome local ยังเชื่อมต่อได้ เพราะ Chrome รับ WebSocket upgrade เฉพาะบน path ต่อ target ที่เฉพาะเจาะจงจาก/json/versionเท่านั้น ขณะที่ provider แบบ hosted ยังสามารถใช้ endpoint WebSocket root ของตนได้เมื่อ endpoint discovery ของตน advertise URL อายุสั้นที่ไม่เหมาะกับ Playwright CDP
openclaw browser doctor ใช้ตรรกะแบบค้นหาก่อนและ fallback เป็น WebSocket
เดียวกับการ attach ขณะ runtime ดังนั้น URL root เปล่าที่เชื่อมต่อสำเร็จจะไม่ถูก
รายงานว่าเข้าถึงไม่ได้โดย diagnostics
Browserbase
Browserbase เป็นแพลตฟอร์ม cloud สำหรับรัน เบราว์เซอร์ headless พร้อมการแก้ CAPTCHA ในตัว stealth mode และ proxy แบบ residential
{ 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 ดังนั้นจึงไม่จำเป็นต้องมีขั้นตอนสร้างเซสชันด้วยตนเอง
- ระดับใช้งานฟรีอนุญาตให้มีหนึ่งเซสชันพร้อมกันและหนึ่งชั่วโมงเบราว์เซอร์ต่อเดือน ดู ราคา สำหรับขีดจำกัดของแผนแบบชำระเงิน
- ดู เอกสาร Browserbase สำหรับข้อมูลอ้างอิง API ฉบับเต็ม คู่มือ SDK และตัวอย่างการผสานรวม
Notte
Notte เป็นแพลตฟอร์มคลาวด์สำหรับเรียกใช้เบราว์เซอร์แบบ headless พร้อม stealth ในตัว พร็อกซีที่พักอาศัย และ Gateway WebSocket แบบ CDP-native
{ 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 ตัดการเชื่อมต่อ
- ระดับใช้งานฟรีอนุญาตให้มีห้าเซสชันพร้อมกันและ 100 ชั่วโมงเบราว์เซอร์ตลอดอายุการใช้งาน ดู ราคา สำหรับขีดจำกัดของแผนแบบชำระเงิน
- ดู เอกสาร Notte สำหรับข้อมูลอ้างอิง API ฉบับเต็ม คู่มือ SDK และตัวอย่างการผสานรวม
ความปลอดภัย
แนวคิดสำคัญ:
- การควบคุมเบราว์เซอร์เป็นแบบ local loopback เท่านั้น การเข้าถึงไหลผ่าน auth ของ Gateway หรือการจับคู่ node
- API HTTP สำหรับเบราว์เซอร์ local loopback แบบสแตนด์อโลนใช้ shared-secret auth เท่านั้น:
gateway token bearer auth,
x-openclaw-passwordหรือ HTTP Basic auth ด้วยรหัสผ่าน Gateway ที่กำหนดค่าไว้ - เฮดเดอร์ระบุตัวตนของ Tailscale Serve และ
gateway.auth.mode: "trusted-proxy"จะ ไม่ ยืนยันตัวตน API เบราว์เซอร์ local loopback แบบสแตนด์อโลนนี้ - หากเปิดใช้การควบคุมเบราว์เซอร์และไม่มีการกำหนดค่า shared-secret auth, OpenClaw
จะสร้างโทเค็น Gateway แบบใช้เฉพาะรันไทม์สำหรับการเริ่มทำงานครั้งนั้น กำหนดค่า
gateway.auth.token,gateway.auth.password,OPENCLAW_GATEWAY_TOKENหรือOPENCLAW_GATEWAY_PASSWORDอย่างชัดเจนหากไคลเอนต์ต้องการ secret ที่คงที่ข้ามการรีสตาร์ท - OpenClaw จะ ไม่ สร้างโทเค็นนั้นโดยอัตโนมัติเมื่อ
gateway.auth.modeเป็นpassword,noneหรือtrusted-proxyอยู่แล้ว - เก็บ Gateway และโฮสต์ node ใดๆ ไว้บนเครือข่ายส่วนตัว (Tailscale); หลีกเลี่ยงการเปิดเผยต่อสาธารณะ
- ปฏิบัติต่อ URL/โทเค็น CDP ระยะไกลเป็น secret; ควรใช้ env vars หรือตัวจัดการ secret
เคล็ดลับ CDP ระยะไกล:
- ควรใช้ endpoint ที่เข้ารหัส (HTTPS หรือ WSS) และโทเค็นอายุสั้นเมื่อเป็นไปได้
- หลีกเลี่ยงการฝังโทเค็นอายุยาวไว้ในไฟล์ config โดยตรง
โปรไฟล์ (หลายเบราว์เซอร์)
OpenClaw รองรับโปรไฟล์ที่มีชื่อหลายรายการ (config การกำหนดเส้นทาง) โปรไฟล์อาจเป็น:
- openclaw-managed: อินสแตนซ์เบราว์เซอร์ที่ใช้ Chromium โดยเฉพาะ พร้อมไดเรกทอรีข้อมูลผู้ใช้ของตัวเอง + พอร์ต CDP
- remote: URL CDP ที่ระบุชัดเจน (เบราว์เซอร์ที่ใช้ Chromium ที่ทำงานอยู่ที่อื่น)
- existing session: โปรไฟล์ Chrome ที่มีอยู่ของคุณผ่าน Chrome DevTools MCP auto-connect
ค่าเริ่มต้น:
- โปรไฟล์
openclawจะถูกสร้างอัตโนมัติหากไม่มี - โปรไฟล์
userมีอยู่ในตัวสำหรับการแนบเซสชันที่มีอยู่ของ Chrome MCP - โปรไฟล์เซสชันที่มีอยู่ต้องเลือกใช้เพิ่มเติมนอกเหนือจาก
user; สร้างด้วย--driver existing-session - พอร์ต CDP ในเครื่องจัดสรรจาก 18800-18899 ตามค่าเริ่มต้น
- การลบโปรไฟล์จะย้ายไดเรกทอรีข้อมูลในเครื่องของโปรไฟล์นั้นไปยังถังขยะ
endpoint ควบคุมทั้งหมดรับ ?profile=<name>; CLI ใช้ --browser-profile
เซสชันที่มีอยู่ผ่าน Chrome DevTools MCP
OpenClaw ยังสามารถแนบกับโปรไฟล์เบราว์เซอร์ที่ใช้ Chromium ที่กำลังทำงานอยู่ผ่าน เซิร์ฟเวอร์ Chrome DevTools MCP อย่างเป็นทางการได้ด้วย วิธีนี้นำแท็บและสถานะการเข้าสู่ระบบ ที่เปิดอยู่แล้วในโปรไฟล์เบราว์เซอร์นั้นกลับมาใช้
ข้อมูลพื้นฐานและข้อมูลอ้างอิงการตั้งค่าอย่างเป็นทางการ:
โปรไฟล์ในตัว:
user
ตัวเลือก: สร้างโปรไฟล์เซสชันที่มีอยู่แบบกำหนดเองของคุณเอง หากคุณต้องการ ชื่อ สี หรือไดเรกทอรีข้อมูลเบราว์เซอร์ที่แตกต่างกัน
พฤติกรรมเริ่มต้น:
- โปรไฟล์
userในตัวใช้ Chrome MCP auto-connect ซึ่งกำหนดเป้าหมายไปที่ โปรไฟล์ Google Chrome ในเครื่องตามค่าเริ่มต้น
ใช้ userDataDir สำหรับ Brave, Edge, Chromium หรือโปรไฟล์ Chrome ที่ไม่ใช่ค่าเริ่มต้น
~ ขยายเป็นไดเรกทอรี home ของ OS ของคุณ:
{ browser: { profiles: { brave: { driver: "existing-session", attachOnly: true, userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", color: "#FB542B", }, }, },}จากนั้นในเบราว์เซอร์ที่ตรงกัน:
- เปิดหน้า inspect ของเบราว์เซอร์นั้นสำหรับการดีบักระยะไกล
- เปิดใช้การดีบักระยะไกล
- คงให้เบราว์เซอร์ทำงานอยู่และอนุมัติพรอมป์การเชื่อมต่อเมื่อ OpenClaw แนบ
หน้า inspect ทั่วไป:
- Chrome:
chrome://inspect/#remote-debugging - Brave:
brave://inspect/#remote-debugging - Edge:
edge://inspect/#remote-debugging
การทดสอบ smoke สำหรับการแนบแบบสด:
openclaw browser --browser-profile user startopenclaw browser --browser-profile user statusopenclaw browser --browser-profile user tabsopenclaw browser --browser-profile user snapshot --format aiความสำเร็จมีลักษณะดังนี้:
statusแสดงdriver: existing-sessionstatusแสดงtransport: chrome-mcpstatusแสดงrunning: truetabsแสดงรายการแท็บเบราว์เซอร์ที่เปิดอยู่แล้วของคุณsnapshotคืนค่า refs จากแท็บสดที่เลือก
สิ่งที่ควรตรวจสอบหากการแนบไม่ทำงาน:
- เบราว์เซอร์ที่ใช้ Chromium เป้าหมายเป็นเวอร์ชัน
144+ - เปิดใช้การดีบักระยะไกลในหน้า inspect ของเบราว์เซอร์นั้นแล้ว
- เบราว์เซอร์แสดงพรอมป์ความยินยอมในการแนบ และคุณยอมรับแล้ว
- หาก Chrome เริ่มด้วย
--remote-debugging-portที่ระบุชัดเจน ให้ตั้งค่าbrowser.profiles.<name>.cdpUrlเป็น endpoint DevTools นั้นแทนการพึ่งพา Chrome MCP auto-connect openclaw doctorย้าย config เบราว์เซอร์แบบ extension เก่าและตรวจสอบว่า ติดตั้ง Chrome ในเครื่องสำหรับโปรไฟล์ auto-connect ค่าเริ่มต้นแล้ว แต่ไม่สามารถ เปิดใช้การดีบักระยะไกลฝั่งเบราว์เซอร์ให้คุณได้
การใช้งานของ agent:
- ใช้
profile="user"เมื่อคุณต้องการสถานะเบราว์เซอร์ที่ผู้ใช้เข้าสู่ระบบไว้ - หากคุณใช้โปรไฟล์เซสชันที่มีอยู่แบบกำหนดเอง ให้ส่งชื่อโปรไฟล์นั้นอย่างชัดเจน
- เลือกโหมดนี้เฉพาะเมื่อผู้ใช้อยู่ที่คอมพิวเตอร์เพื่ออนุมัติพรอมป์การแนบ
- Gateway หรือโฮสต์ node สามารถ spawn
npx chrome-devtools-mcp@latest --autoConnect
หมายเหตุ:
- เส้นทางนี้มีความเสี่ยงสูงกว่าโปรไฟล์
openclawที่แยกไว้ เพราะสามารถ ดำเนินการภายในเซสชันเบราว์เซอร์ที่คุณลงชื่อเข้าใช้อยู่ - OpenClaw ไม่เปิดเบราว์เซอร์สำหรับ driver นี้ แต่จะแนบเท่านั้น
- OpenClaw ใช้โฟลว์
--autoConnectของ Chrome DevTools MCP อย่างเป็นทางการที่นี่ หาก ตั้งค่าuserDataDirไว้ ค่านั้นจะถูกส่งผ่านเพื่อกำหนดเป้าหมายไปยังไดเรกทอรีข้อมูลผู้ใช้นั้น - existing-session สามารถแนบบนโฮสต์ที่เลือกหรือผ่าน node เบราว์เซอร์ที่เชื่อมต่ออยู่ได้ หาก Chrome อยู่ที่อื่นและไม่มี node เบราว์เซอร์เชื่อมต่ออยู่ ให้ใช้ CDP ระยะไกลหรือโฮสต์ node แทน
การเปิด Chrome MCP แบบกำหนดเอง
แทนที่เซิร์ฟเวอร์ Chrome DevTools MCP ที่ถูก spawn ต่อโปรไฟล์ เมื่อโฟลว์เริ่มต้น
npx chrome-devtools-mcp@latest ไม่ใช่สิ่งที่คุณต้องการ (โฮสต์ออฟไลน์
เวอร์ชันที่ตรึงไว้ ไบนารีที่รวมไว้เอง):
| ฟิลด์ | สิ่งที่ทำ |
|---|---|
mcpCommand |
executable ที่จะ spawn แทน npx resolve ตามที่ระบุ; รองรับ path แบบ absolute |
mcpArgs |
อาร์เรย์อาร์กิวเมนต์ที่ส่งแบบ verbatim ไปยัง mcpCommand แทนที่อาร์กิวเมนต์เริ่มต้น chrome-devtools-mcp@latest --autoConnect |
เมื่อตั้งค่า cdpUrl บนโปรไฟล์ existing-session, OpenClaw จะข้าม
--autoConnect และส่งต่อ endpoint ไปยัง Chrome MCP โดยอัตโนมัติ:
http(s)://...→--browserUrl <url>(endpoint การค้นหา DevTools HTTP)ws(s)://...→--wsEndpoint <url>(CDP WebSocket โดยตรง)
ไม่สามารถรวมแฟล็ก endpoint และ userDataDir เข้าด้วยกันได้: เมื่อตั้งค่า cdpUrl,
userDataDir จะถูกละเว้นสำหรับการเปิด Chrome MCP เพราะ Chrome MCP แนบกับ
เบราว์เซอร์ที่กำลังทำงานอยู่หลัง endpoint แทนการเปิดไดเรกทอรีโปรไฟล์
ข้อจำกัดของฟีเจอร์ existing-session
เมื่อเทียบกับโปรไฟล์ openclaw ที่จัดการให้ driver แบบ existing-session มีข้อจำกัดมากกว่า:
- ภาพหน้าจอ - การจับภาพหน้าและการจับภาพองค์ประกอบ
--refใช้งานได้; selector CSS--elementไม่รองรับ--full-pageไม่สามารถใช้ร่วมกับ--refหรือ--elementได้ ไม่จำเป็นต้องใช้ Playwright สำหรับภาพหน้าจอหน้าเว็บหรือองค์ประกอบแบบอิง ref - การกระทำ -
click,type,hover,scrollIntoView,dragและselectต้องใช้ snapshot refs (ไม่มี selector CSS)click-coordsคลิกพิกัด viewport ที่มองเห็นได้และไม่ต้องใช้ snapshot refclickเป็นปุ่มซ้ายเท่านั้นtypeไม่รองรับslowly=true; ใช้fillหรือpresspressไม่รองรับdelayMstype,hover,scrollIntoView,drag,select,fillและevaluateไม่รองรับ timeout ต่อการเรียกselectรับค่าเดียว - รอ / อัปโหลด / กล่องโต้ตอบ -
wait --urlรองรับรูปแบบแบบตรงกันทุกตัวอักษร substring และ glob;wait --load networkidleไม่รองรับบนโปรไฟล์ existing-session (ใช้งานได้บนโปรไฟล์ managed และ raw/remote CDP) hook การอัปโหลดต้องใช้refหรือinputRef, ทีละหนึ่งไฟล์, ไม่มี CSSelementhook กล่องโต้ตอบไม่รองรับการแทนที่ timeout หรือdialogId - การมองเห็นกล่องโต้ตอบ - การตอบกลับของการกระทำเบราว์เซอร์แบบ managed จะรวม
blockedByDialogและbrowserState.dialogs.pendingเมื่อการกระทำเปิดกล่องโต้ตอบแบบ modal; snapshot รวมสถานะกล่องโต้ตอบที่รอดำเนินการด้วย ตอบด้วยbrowser dialog --accept/--dismiss --dialog-id <id>ขณะที่กล่องโต้ตอบรอดำเนินการ กล่องโต้ตอบที่จัดการนอก OpenClaw จะปรากฏใต้browserState.dialogs.recent - ฟีเจอร์เฉพาะ managed - การกระทำแบบ batch, การส่งออก PDF, การดักจับการดาวน์โหลด และ
responsebodyยังคงต้องใช้เส้นทางเบราว์เซอร์แบบ managed
การรับประกันการแยกส่วน
- ไดเรกทอรีข้อมูลผู้ใช้เฉพาะ: ไม่แตะโปรไฟล์เบราว์เซอร์ส่วนตัวของคุณ
- พอร์ตเฉพาะ: หลีกเลี่ยง
9222เพื่อป้องกันการชนกับเวิร์กโฟลว์การพัฒนา - การควบคุมแท็บแบบกำหนดผลได้:
tabsคืนค่าsuggestedTargetIdก่อน จากนั้น เป็น handletabIdที่คงที่ เช่นt1, ป้ายกำกับที่เป็นตัวเลือก และtargetIdดิบ Agents ควรใช้suggestedTargetIdซ้ำ; id ดิบยังคงมีให้สำหรับ การดีบักและความเข้ากันได้
การเลือกเบราว์เซอร์
เมื่อเปิดในเครื่อง OpenClaw จะเลือกตัวแรกที่พร้อมใช้งาน:
- Chrome
- Brave
- Edge
- Chromium
- Chrome Canary
คุณสามารถแทนที่ด้วย browser.executablePath
แพลตฟอร์ม:
- macOS: ตรวจสอบ
/Applicationsและ~/Applications - Linux: ตรวจสอบตำแหน่งทั่วไปของ Chrome/Brave/Edge/Chromium ใต้
/usr/bin,/snap/bin,/opt/google,/opt/brave.com,/usr/lib/chromiumและ/usr/lib/chromium-browserรวมถึง Chromium ที่ Playwright จัดการภายใต้PLAYWRIGHT_BROWSERS_PATHหรือ~/.cache/ms-playwright - Windows: ตรวจสอบตำแหน่งติดตั้งทั่วไป
API ควบคุม (ตัวเลือก)
สำหรับการสคริปต์และการดีบัก Gateway เปิดเผย API HTTP ควบคุมแบบ local loopback เท่านั้น
ขนาดเล็ก พร้อม CLI openclaw browser ที่ตรงกัน (snapshot, refs, wait
power-ups, เอาต์พุต JSON, เวิร์กโฟลว์ดีบัก) ดู
API ควบคุมเบราว์เซอร์ สำหรับข้อมูลอ้างอิงฉบับเต็ม
การแก้ไขปัญหา
สำหรับปัญหาเฉพาะ Linux (โดยเฉพาะ snap Chromium) โปรดดู การแก้ปัญหาเบราว์เซอร์.
สำหรับการตั้งค่าแบบแยกโฮสต์ WSL2 Gateway + Windows Chrome โปรดดู การแก้ปัญหา WSL2 + Windows + remote 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>Port <port> is in use for profile "<name>" but not by openclawเมื่อมีการกำหนดค่า บริการ CDP ภายนอกแบบ loopback โดยไม่มีattachOnly: true
- การบล็อก SSRF ของการนำทาง:
- โฟลว์
open,navigate, snapshot หรือการเปิดแท็บล้มเหลวด้วยข้อผิดพลาดนโยบายเบราว์เซอร์/เครือข่าย ขณะที่startและtabsยังทำงานได้
- โฟลว์
ใช้ลำดับขั้นต่ำนี้เพื่อแยกทั้งสองกรณีออกจากกัน:
openclaw browser --browser-profile openclaw startopenclaw browser --browser-profile openclaw tabsopenclaw browser --browser-profile openclaw open https://example.comวิธีอ่านผลลัพธ์:
- หาก
startล้มเหลวพร้อมnot reachable after startให้แก้ปัญหาความพร้อมของ CDP ก่อน - หาก
startสำเร็จแต่tabsล้มเหลว ระนาบควบคุมยังมีสถานะไม่ปกติ ให้ถือว่านี่เป็นปัญหาการเข้าถึง CDP ไม่ใช่ปัญหาการนำทางหน้า - หาก
startและtabsสำเร็จ แต่openหรือnavigateล้มเหลว แสดงว่าระนาบควบคุมเบราว์เซอร์พร้อมใช้งานแล้ว และความล้มเหลวอยู่ที่นโยบายการนำทางหรือหน้าเป้าหมาย - หาก
start,tabsและopenสำเร็จทั้งหมด เส้นทางควบคุมเบราว์เซอร์ที่จัดการขั้นพื้นฐานมีสถานะปกติ
รายละเอียดพฤติกรรมที่สำคัญ:
- การกำหนดค่าเบราว์เซอร์มีค่าเริ่มต้นเป็นอ็อบเจ็กต์นโยบาย SSRF แบบปิดเมื่อผิดพลาด แม้คุณไม่ได้กำหนดค่า
browser.ssrfPolicy - สำหรับโปรไฟล์ที่จัดการโดย OpenClaw
openclawแบบ local loopback การตรวจสุขภาพ CDP จะข้ามการบังคับใช้การเข้าถึง SSRF ของเบราว์เซอร์สำหรับระนาบควบคุมภายในเครื่องของ OpenClaw เองโดยเจตนา - การป้องกันการนำทางแยกออกจากกัน ผลลัพธ์
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ใช้ IDrefจาก snapshot เพื่อคลิก/พิมพ์/ลาก/เลือกbrowser screenshotจับภาพพิกเซล (ทั้งหน้า องค์ประกอบ หรือ refs ที่มีป้ายกำกับ)browser doctorตรวจสอบความพร้อมของ Gateway, Plugin, โปรไฟล์, เบราว์เซอร์ และแท็บbrowserรับ:profileเพื่อเลือกโปรไฟล์เบราว์เซอร์ที่มีชื่อ (openclaw, chrome หรือ remote CDP)target(sandbox|host|node) เพื่อเลือกตำแหน่งที่เบราว์เซอร์ทำงานอยู่- ในเซสชันแบบ sandbox,
target: "host"ต้องใช้agents.defaults.sandbox.browser.allowHostControl=true - หากละ
target: เซสชันแบบ sandbox จะใช้ค่าเริ่มต้นเป็นsandboxส่วนเซสชันที่ไม่ใช่ sandbox จะใช้ค่าเริ่มต้นเป็นhost - หากมีโหนดที่รองรับเบราว์เซอร์เชื่อมต่ออยู่ เครื่องมืออาจกำหนดเส้นทางไปยังโหนดนั้นโดยอัตโนมัติ เว้นแต่คุณจะตรึง
target="host"หรือtarget="node"
สิ่งนี้ทำให้ Agent ทำงานแบบกำหนดได้แน่นอนและหลีกเลี่ยงตัวเลือกที่เปราะบาง
ที่เกี่ยวข้อง
- ภาพรวมเครื่องมือ - เครื่องมือ Agent ทั้งหมดที่มีให้ใช้
- Sandboxing - การควบคุมเบราว์เซอร์ในสภาพแวดล้อมแบบ sandbox
- ความปลอดภัย - ความเสี่ยงและการเสริมความแข็งแกร่งของการควบคุมเบราว์เซอร์