Tools
เบราว์เซอร์ (จัดการโดย OpenClaw)
OpenClaw สามารถเรียกใช้ โปรไฟล์ Chrome/Brave/Edge/Chromium แบบเฉพาะ ที่เอเจนต์ควบคุมได้ โดยทำงานผ่านบริการควบคุมภายในขนาดเล็กภายใน Gateway (เฉพาะ loopback) และแยกจากเบราว์เซอร์ส่วนตัวของคุณ
- ให้มองว่าเป็น เบราว์เซอร์แยกต่างหากสำหรับเอเจนต์เท่านั้น โปรไฟล์
openclawจะไม่แตะต้องโปรไฟล์เบราว์เซอร์ส่วนตัวของคุณเลย - เอเจนต์เปิดแท็บ อ่านหน้าเว็บ คลิก และพิมพ์ในพื้นที่แยกนี้
- ส่วนโปรไฟล์
userในตัวจะเชื่อมต่อกับเซสชัน Chrome จริงที่คุณลงชื่อเข้าใช้อยู่ผ่าน Chrome DevTools MCP
สิ่งที่คุณจะได้รับ
- โปรไฟล์เบราว์เซอร์แยกชื่อ openclaw (ค่าเริ่มต้นใช้สีเน้นส้ม)
- การควบคุมแท็บที่ให้ผลแน่นอน (แสดงรายการ/เปิด/โฟกัส/ปิด)
- การดำเนินการของเอเจนต์ (คลิก/พิมพ์/ลาก/เลือก), สแนปช็อต, ภาพหน้าจอ และ PDF
- โปรไฟล์ที่รองรับโดย Playwright จะบันทึกการนำทางไปยังไฟล์แนบโดยตรงไว้ในไดเรกทอรีดาวน์โหลดที่จัดการ และส่งคืนข้อมูลเมตา
{ url, suggestedFilename, path }หลังจากตรวจสอบนโยบาย URL สุดท้ายแล้ว - การดำเนินการของเอเจนต์ที่รองรับโดย Playwright จะส่งคืนอาร์เรย์
downloadsพร้อมข้อมูลเมตาที่จัดการชุดเดียวกัน เมื่อการดำเนินการเริ่มการดาวน์โหลดอย่างน้อยหนึ่งรายการทันที - Skills
browser-automationที่รวมมาให้ ซึ่งสอนเอเจนต์เกี่ยวกับวงจรการกู้คืนสำหรับสแนปช็อต แท็บที่เสถียร การอ้างอิงที่หมดอายุ และตัวขัดขวางที่ต้องดำเนินการด้วยตนเอง เมื่อเปิดใช้ Plugin เบราว์เซอร์ - รองรับหลายโปรไฟล์เป็นตัวเลือก (
openclaw,work,remote, ...)
เบราว์เซอร์นี้ ไม่ใช่ เบราว์เซอร์ที่ใช้ประจำวัน แต่เป็นพื้นผิวที่ปลอดภัยและแยกออกมา สำหรับระบบอัตโนมัติและการตรวจสอบโดยเอเจนต์
บน macOS คุณสามารถคัดลอกคุกกี้จากโปรไฟล์ระบบในตระกูล Chrome ไปยังโปรไฟล์ที่จัดการแยกต่างหากได้อย่างชัดเจน เบราว์เซอร์ที่จัดการยังคงใช้ไดเรกทอรีข้อมูลผู้ใช้ของตนเอง โดยคัดลอกเฉพาะคุกกี้ที่เลือก ส่วนที่จัดเก็บในเครื่องและ IndexedDB จะไม่ถูกคัดลอก ดูคำสั่งนำเข้าและข้อจำกัดได้ที่ โปรไฟล์ หรือข้อมูลอ้างอิง CLI สำหรับ openclaw browser
เริ่มต้นอย่างรวดเร็ว
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"ปิดใช้เบราว์เซอร์" หมายถึง Plugin หรือ browser.enabled ถูกปิดอยู่ โปรดดู
การกำหนดค่า และการควบคุม Plugin
หากไม่มี 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 แบบเต็ม หากต้องการให้เอเจนต์หรือ
เอเจนต์ย่อยที่สร้างขึ้นใช้ระบบอัตโนมัติของเบราว์เซอร์ ให้เพิ่มเบราว์เซอร์ในขั้นตอน
โปรไฟล์:
{ tools: { profile: "coding", alsoAllow: ["browser"], },}สำหรับเอเจนต์เดียว ให้ใช้ agents.list[].tools.alsoAllow: ["browser"]
เฉพาะ tools.subagents.tools.allow: ["browser"] อย่างเดียวไม่เพียงพอ เนื่องจากนโยบายเอเจนต์ย่อย
จะถูกนำไปใช้หลังจากการกรองโปรไฟล์
Plugin เบราว์เซอร์มีคำแนะนำสำหรับเอเจนต์สองระดับ:
- คำอธิบายเครื่องมือ
browserมีข้อกำหนดแบบย่อที่เปิดใช้งานเสมอ: เลือก โปรไฟล์ที่ถูกต้อง ใช้การอ้างอิงในแท็บเดิม ใช้tabId/ป้ายกำกับเพื่อกำหนดเป้าหมาย แท็บ และโหลด Skills เบราว์เซอร์สำหรับงานหลายขั้นตอน - Skills
browser-automationที่รวมมาให้มีวงจรการทำงานที่ยาวกว่า: ตรวจสอบสถานะ/แท็บก่อน ติดป้ายแท็บงาน สร้างสแนปช็อตก่อนดำเนินการ สร้างสแนปช็อตใหม่ หลัง UI เปลี่ยนแปลง กู้คืนการอ้างอิงที่หมดอายุหนึ่งครั้ง และรายงานตัวขัดขวาง เช่น การเข้าสู่ระบบ/2FA/captcha หรือ กล้อง/ไมโครโฟน ว่าต้องดำเนินการด้วยตนเองแทนการคาดเดา
Skills ที่รวมมากับ Plugin จะแสดงอยู่ใน Skills ที่พร้อมใช้งานของเอเจนต์เมื่อ เปิดใช้ Plugin คำแนะนำ Skills แบบเต็มจะโหลดเมื่อต้องการ ดังนั้น การทำงานตามปกติจึงไม่เสียต้นทุนโทเค็นเต็มจำนวน
ไม่มีคำสั่งหรือเครื่องมือเบราว์เซอร์
หากไม่รู้จัก openclaw browser หลังการอัปเกรด, ไม่มี browser.request หรือเอเจนต์รายงานว่าเครื่องมือเบราว์เซอร์ไม่พร้อมใช้งาน สาเหตุทั่วไปคือรายการ plugins.allow ที่ไม่มี browser และไม่มีบล็อกการกำหนดค่า browser ที่ระดับราก ให้เพิ่มดังนี้:
{ plugins: { allow: ["telegram", "browser"], },}บล็อก browser ที่ระดับรากอย่างชัดเจน (คีย์ใดก็ได้ภายใต้ browser เช่น
browser.enabled=true หรือ browser.profiles.<name>) จะเปิดใช้งาน
Plugin เบราว์เซอร์ที่รวมมาให้ แม้จะอยู่ภายใต้ plugins.allow ที่เข้มงวด ซึ่งสอดคล้องกับ
พฤติกรรมการกำหนดค่าช่องทางที่รวมมาให้ plugins.entries.browser.enabled=true และ
tools.alsoAllow: ["browser"] ไม่สามารถใช้แทนการเป็นสมาชิกในรายการอนุญาตได้
ด้วยตัวเอง การนำ plugins.allow ออกทั้งหมดจะคืนค่าเริ่มต้นเช่นกัน
โปรไฟล์: openclaw, user, chrome
openclaw: เบราว์เซอร์ที่จัดการและแยกออกมา (ไม่ต้องใช้ส่วนขยาย)user: โปรไฟล์แนบ Chrome DevTools MCP ในตัวสำหรับเซสชัน Chrome จริง ที่ลงชื่อเข้าใช้แล้ว ของคุณ Chrome จะแสดงข้อความแจ้งเตือน "Allow remote debugging?" ที่บล็อกการทำงานในครั้งแรกที่ OpenClaw เชื่อมต่อ ดังนั้นต้องมีคนอยู่ที่คอมพิวเตอร์chrome: โปรไฟล์ส่วนขยาย Chrome ในตัวสำหรับ เซสชัน Chrome จริงที่ลงชื่อเข้าใช้แล้ว ของคุณ ทำงานจากโทรศัพท์ได้แม้ไม่มีใครอยู่ ที่โต๊ะ เนื่องจากขับเคลื่อนแท็บผ่านส่วนขยายเบราว์เซอร์ OpenClaw แทน พอร์ตการดีบักระยะไกล จึงไม่มีข้อความแจ้งเตือน "Allow remote debugging?"
สำหรับการเรียกเครื่องมือเบราว์เซอร์ของเอเจนต์:
- ค่าเริ่มต้น: ใช้เบราว์เซอร์
openclawที่แยกออกมา - ควรใช้
profile="chrome"(ส่วนขยาย) เมื่อเซสชันที่เข้าสู่ระบบอยู่มีความสำคัญ และผู้ใช้ ไม่ได้อยู่ที่คอมพิวเตอร์ (Telegram, WhatsApp เป็นต้น) - ควรใช้
profile="user"(Chrome MCP) เมื่อเซสชันที่เข้าสู่ระบบอยู่มีความสำคัญ และผู้ใช้ อยู่ที่คอมพิวเตอร์ เพื่ออนุมัติข้อความแจ้งให้เชื่อมต่อ profileเป็นการแทนที่อย่างชัดเจนเมื่อคุณต้องการโหมดเบราว์เซอร์เฉพาะ
ตั้งค่า browser.defaultProfile: "openclaw" หากต้องการใช้โหมดที่จัดการเป็นค่าเริ่มต้น
การกำหนดค่า
การตั้งค่าเบราว์เซอร์อยู่ใน ~/.openclaw/openclaw.json
{ browser: { enabled: true, // ค่าเริ่มต้น: true evaluateEnabled: true, // ค่าเริ่มต้น: true; false ปิดใช้ act:evaluate (JS ใดๆ) ssrfPolicy: { // dangerouslyAllowPrivateNetwork: true, // เลือกใช้เฉพาะสำหรับการเข้าถึงเครือข่ายส่วนตัวที่เชื่อถือได้ // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, // cdpUrl: "http://127.0.0.1:18792", // การแทนที่โปรไฟล์เดียวแบบเดิม remoteCdpTimeoutMs: 1500, // ระยะหมดเวลาของ HTTP สำหรับ CDP ระยะไกล (ms) remoteCdpHandshakeTimeoutMs: 3000, // ระยะหมดเวลาของแฮนด์เชก WebSocket สำหรับ CDP ระยะไกล (ms) localLaunchTimeoutMs: 15000, // ระยะหมดเวลาสำหรับการค้นหา Chrome ที่จัดการในเครื่อง (ms) localCdpReadyTimeoutMs: 8000, // ระยะหมดเวลาความพร้อมของ CDP หลังเปิดใช้งานแบบจัดการในเครื่อง (ms) actionTimeoutMs: 60000, // ระยะหมดเวลาเริ่มต้นของการดำเนินการเบราว์เซอร์ (ms) tabCleanup: { enabled: true, // ค่าเริ่มต้น: true idleMinutes: 120, // ตั้งเป็น 0 เพื่อปิดการล้างแท็บที่ไม่ได้ใช้งาน maxTabsPerSession: 8, // ตั้งเป็น 0 เพื่อปิดขีดจำกัดต่อเซสชัน sweepMinutes: 5, }, // snapshotDefaults: { mode: "efficient" }, // โหมดสแนปช็อตเริ่มต้นเมื่อผู้เรียกไม่ได้ระบุ 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" เปลี่ยนโหมดการแยกข้อมูล snapshot เริ่มต้น
เมื่อผู้เรียกไม่ได้ส่ง snapshotFormat หรือ
mode อย่างชัดเจน โปรดดูตัวเลือกสแนปช็อตต่อการเรียกที่ API ควบคุมเบราว์เซอร์
การมองเห็นภาพหน้าจอ (รองรับโมเดลข้อความเท่านั้น)
เมื่อโมเดลหลักรองรับเฉพาะข้อความ (ไม่รองรับการมองเห็น/หลายรูปแบบ) ภาพหน้าจอ ของเบราว์เซอร์จะส่งคืนบล็อกรูปภาพที่โมเดลอ่านไม่ได้ ภาพหน้าจอของเบราว์เซอร์ ใช้การกำหนดค่าการทำความเข้าใจรูปภาพที่มีอยู่ร่วมกัน ดังนั้นโมเดลรูปภาพ ที่กำหนดค่าไว้สำหรับการทำความเข้าใจสื่อจึงสามารถอธิบายภาพหน้าจอเป็นข้อความได้โดยไม่ต้องมี การตั้งค่าโมเดลเฉพาะสำหรับเบราว์เซอร์
{ tools: { media: { image: { models: [ { provider: "bytedance", model: "doubao-seed-2.0-pro" }, // เพิ่มตัวเลือกสำรอง; รายการแรกที่สำเร็จจะถูกใช้ { provider: "openai", model: "gpt-4o" }, ], }, // โมเดลสื่อที่ใช้ร่วมกันก็ทำงานได้เมื่อมีแท็กว่ารองรับรูปภาพ // models: [{ provider: "openai", model: "gpt-4o", capabilities: ["image"] }], }, }, agents: { defaults: { // ค่าเริ่มต้นของโมเดลรูปภาพที่มีอยู่จะถูกนำมาใช้เช่นกัน // imageModel: { primary: "openai/gpt-4o" }, }, },}วิธีการทำงาน:
- เอเจนต์เรียก
browser screenshotและบันทึกรูปภาพลงดิสก์ตามปกติ - เครื่องมือเบราว์เซอร์จะสอบถามรันไทม์การทำความเข้าใจรูปภาพที่มีอยู่ว่าสามารถ อธิบายภาพหน้าจอโดยใช้โมเดลรูปภาพสื่อที่กำหนดค่าไว้ โมเดลสื่อ ที่ใช้ร่วมกัน ค่าเริ่มต้นของโมเดลรูปภาพ หรือผู้ให้บริการรูปภาพที่รองรับการยืนยันตัวตนได้หรือไม่
- โมเดลการมองเห็นจะส่งคืนคำอธิบายข้อความ ซึ่งจะถูกครอบด้วย
wrapExternalContent(ตัวป้องกันการแทรกพรอมต์) และส่งคืนให้เอเจนต์ เป็นบล็อกข้อความแทนบล็อกรูปภาพ - หากการทำความเข้าใจรูปภาพไม่พร้อมใช้งาน ถูกข้าม หรือล้มเหลว เบราว์เซอร์จะ กลับไปส่งคืนบล็อกรูปภาพเดิม
บล็อกรูปภาพจากภาพหน้าจอเป็นผลลัพธ์เครื่องมือส่วนตัว เอเจนต์สามารถตรวจสอบได้ แต่ OpenClaw จะไม่แนบผลลัพธ์เหล่านี้กับการตอบกลับในช่องทางโดยอัตโนมัติ หากต้องการแชร์ ภาพหน้าจอ ให้ขอให้เอเจนต์ส่งอย่างชัดเจนด้วยเครื่องมือข้อความ
ใช้ฟิลด์ tools.media.image / tools.media.models ที่มีอยู่สำหรับ
โมเดลสำรอง ระยะหมดเวลา ขีดจำกัดไบต์ โปรไฟล์ และการตั้งค่าคำขอของผู้ให้บริการ
หากโมเดลหลักที่ใช้งานอยู่รองรับการมองเห็นอยู่แล้ว และไม่ได้กำหนดค่าโมเดล การทำความเข้าใจรูปภาพอย่างชัดเจน OpenClaw จะคงผลลัพธ์รูปภาพตามปกติไว้ เพื่อให้ โมเดลหลักอ่านภาพหน้าจอได้โดยตรง
พอร์ตและการเข้าถึง
- บริการควบคุมผูกกับลูปแบ็กบนพอร์ตที่ได้มาจาก
gateway.port(ค่าเริ่มต้น18791= gateway + 2) โดยOPENCLAW_GATEWAY_PORTมีลำดับความสำคัญเหนือgateway.port; ค่าใดค่าหนึ่งจะเลื่อนพอร์ตที่ได้มาในกลุ่มเดียวกัน - โปรไฟล์
openclawภายในเครื่องจะกำหนดcdpPort/cdpUrlโดยอัตโนมัติจากช่วงที่เริ่มต้นสูงกว่าพอร์ตควบคุม 9 พอร์ต (ค่าเริ่มต้น18800-18899); ให้ตั้งค่าเหล่านี้เฉพาะสำหรับ โปรไฟล์ CDP ระยะไกลหรือการเชื่อมต่อกับปลายทางของเซสชันที่มีอยู่ โดยค่าเริ่มต้นของcdpUrlจะเป็น พอร์ต CDP ภายในเครื่องที่มีการจัดการเมื่อไม่ได้ตั้งค่าไว้ remoteCdpTimeoutMsใช้กับการตรวจสอบการเข้าถึง CDP HTTP ทั้งแบบระยะไกลและแบบattachOnlyรวมถึงคำขอ HTTP สำหรับเปิดแท็บ;remoteCdpHandshakeTimeoutMsใช้กับ การจับมือ CDP WebSocket ของรายการเหล่านั้น การแจกแจงแท็บ Playwright ระยะไกลแบบถาวร จะใช้ค่าที่มากกว่าระหว่างสองค่านี้เป็นกำหนดเวลาสิ้นสุดของการดำเนินการlocalLaunchTimeoutMsคือกรอบเวลาสำหรับกระบวนการ Chrome ที่มีการจัดการและเปิดใช้งานภายในเครื่อง เพื่อเปิดเผยปลายทาง CDP HTTP ส่วนlocalCdpReadyTimeoutMsคือ กรอบเวลาต่อเนื่องสำหรับความพร้อมของ CDP websocket หลังจากค้นพบกระบวนการแล้ว ให้เพิ่มค่าเหล่านี้บน Raspberry Pi, VPS ระดับล่าง หรือฮาร์ดแวร์รุ่นเก่าที่ Chromium เริ่มทำงานช้า ค่าต้องเป็นจำนวนเต็มบวกไม่เกิน120000ms; ค่า การกำหนดค่าที่ไม่ถูกต้องจะถูกปฏิเสธ- ความล้มเหลวซ้ำ ๆ ในการเปิดใช้งาน/เตรียมความพร้อมของ Chrome ที่มีการจัดการจะถูกตัดวงจรแยกตาม โปรไฟล์ หลังจากล้มเหลวติดต่อกันหลายครั้ง OpenClaw จะหยุดพักการพยายามเปิดใช้งานใหม่ ชั่วครู่ แทนที่จะสร้าง Chromium ทุกครั้งที่เรียกใช้เครื่องมือเบราว์เซอร์ ให้แก้ไข ปัญหาการเริ่มต้น ปิดใช้งานเบราว์เซอร์หากไม่จำเป็น หรือรีสตาร์ต Gateway หลังจากแก้ไขแล้ว
actionTimeoutMsคือกรอบเวลาเริ่มต้นสำหรับคำขอactของเบราว์เซอร์เมื่อผู้เรียกไม่ได้ส่งtimeoutMsการรับส่งข้อมูลของไคลเอนต์จะเพิ่มช่วงผ่อนผันเล็กน้อย เพื่อให้การรอเป็นเวลานานเสร็จสิ้นได้แทนที่จะหมดเวลาที่ขอบเขต HTTPtabCleanupคือการล้างข้อมูลแบบพยายามอย่างเต็มที่สำหรับแท็บที่เปิดโดยเซสชันเบราว์เซอร์ของเอเจนต์หลัก การล้างข้อมูลตามวงจรชีวิตของเอเจนต์ย่อย, cron และ ACP ยังคงปิดแท็บที่ติดตามไว้อย่างชัดเจนเมื่อเซสชันสิ้นสุด; เซสชันหลักจะเก็บแท็บที่ใช้งานอยู่ไว้เพื่อนำกลับมาใช้ใหม่ แล้วปิดแท็บที่ติดตามซึ่งไม่ได้ใช้งานหรือมีจำนวนเกินในเบื้องหลัง
นโยบาย SSRF
- คำขอการนำทางของเบราว์เซอร์และการเปิดแท็บจะได้รับการตรวจสอบล่วงหน้า ระหว่างการดำเนินการและช่วงผ่อนผันหลังการดำเนินการที่มีขอบเขต การโต้ตอบของ Playwright ที่มีการป้องกัน (คลิก, คลิกตามพิกัด, วางเมาส์เหนือ, ลาก, เลื่อน, เลือก, กด, พิมพ์, กรอกแบบฟอร์ม และประเมินผล) จะสกัดกั้นการโหลดเอกสารระดับบนสุดและเฟรมย่อยที่นโยบายปฏิเสธก่อนส่งไบต์ของคำขอ HTTP จากนั้นจะพยายามตรวจสอบ URL
http(s)สุดท้ายอีกครั้ง - ก่อนเปิดใช้งาน Chrome ใหม่แต่ละครั้งที่ OpenClaw จัดการ OpenClaw จะพยายามปิดใช้งานการคาดการณ์เครือข่าย เพื่อระงับการเชื่อมต่อล่วงหน้าเชิงคาดการณ์ของ Chromium ที่ตรวจพบสำหรับการโหลดที่ถูกปฏิเสธเหล่านั้น นี่เป็นการป้องกันเชิงลึก ไม่ใช่ขอบเขตของนโยบาย: เบราว์เซอร์ที่นำกลับมาใช้ใหม่ระหว่างการรีสตาร์ตบริการควบคุมและแบ็กเอนด์เบราว์เซอร์อื่น ๆ อาจไม่ได้ใช้การเสริมความแข็งแกร่งนี้ร่วมกัน การกำหนดเส้นทางของ Playwright ยังคงไม่ใช่ไฟร์วอลล์เครือข่าย และไม่สกัดกั้นช่วงการเปลี่ยนเส้นทาง คำขอแรกของป๊อปอัป ทราฟฟิกของ Service Worker โค้ดหน้าเว็บที่ทำงานหลังจากช่วงป้องกันที่มีขอบเขต หรือทุกเส้นทางเบื้องหลัง/ทรัพยากรย่อย การแยกทราฟฟิกขาออกอย่างสมบูรณ์ต้องใช้การแยกฝั่งเจ้าของหรือพร็อกซีที่บังคับใช้นโยบาย
- ในโหมด SSRF แบบเข้มงวด การค้นหาปลายทาง CDP ระยะไกลและโพรบ
/json/version(cdpUrl) จะได้รับการตรวจสอบด้วย - ตัวแปรสภาพแวดล้อม
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYและNO_PROXYของ Gateway/ผู้ให้บริการจะไม่ทำหน้าที่เป็นพร็อกซีให้เบราว์เซอร์ที่ OpenClaw จัดการโดยอัตโนมัติ ตามค่าเริ่มต้น Chrome ที่มีการจัดการจะเปิดใช้งานโดยเชื่อมต่อโดยตรง เพื่อไม่ให้การตั้งค่าพร็อกซีของผู้ให้บริการลดทอนการตรวจสอบ SSRF ของเบราว์เซอร์ - โพรบตรวจสอบความพร้อมของ CDP ภายในเครื่องที่ OpenClaw จัดการและการเชื่อมต่อ DevTools WebSocket จะข้ามพร็อกซีเครือข่ายที่มีการจัดการสำหรับปลายทางลูปแบ็กที่เปิดใช้งานนั้นโดยตรง ดังนั้น
openclaw browser startจึงยังทำงานได้เมื่อพร็อกซีของผู้ปฏิบัติงานบล็อกทราฟฟิกขาออกของลูปแบ็ก - หากต้องการให้เบราว์เซอร์ที่มีการจัดการใช้พร็อกซี ให้ส่งแฟล็กพร็อกซีของ Chrome อย่างชัดเจนผ่าน
browser.extraArgsเช่น--proxy-server=...หรือ--proxy-pac-url=...โหมด SSRF แบบเข้มงวดจะบล็อกการกำหนดเส้นทางพร็อกซีของเบราว์เซอร์อย่างชัดเจน เว้นแต่จะเปิดใช้งานการเข้าถึงเครือข่ายส่วนตัวของเบราว์เซอร์โดยตั้งใจ browser.ssrfPolicy.dangerouslyAllowPrivateNetworkปิดอยู่ตามค่าเริ่มต้น; เปิดใช้งานเฉพาะเมื่อเชื่อถือการเข้าถึงเครือข่ายส่วนตัวของเบราว์เซอร์โดยตั้งใจเท่านั้น- ยังคงรองรับ
browser.ssrfPolicy.allowPrivateNetworkในฐานะนามแฝงแบบดั้งเดิม
ลักษณะการทำงานของโปรไฟล์
attachOnly: trueหมายถึงห้ามเปิดใช้งานเบราว์เซอร์ภายในเครื่อง; ให้เชื่อมต่อเฉพาะเมื่อมีเบราว์เซอร์ทำงานอยู่แล้ว- สามารถตั้งค่า
headlessแบบส่วนกลางหรือแยกตามโปรไฟล์ภายในเครื่องที่มีการจัดการ ค่าระดับโปรไฟล์จะมีผลเหนือbrowser.headlessดังนั้นโปรไฟล์หนึ่งที่เปิดใช้งานภายในเครื่องจึงสามารถทำงานแบบไม่มีส่วนติดต่อผู้ใช้ ขณะที่อีกโปรไฟล์ยังคงแสดงหน้าต่างได้ POST /start?headless=trueและopenclaw browser start --headlessขอให้ เปิดใช้งานแบบไม่มีส่วนติดต่อผู้ใช้ครั้งเดียวสำหรับโปรไฟล์ภายในเครื่องที่มีการจัดการ โดยไม่เขียนทับbrowser.headlessหรือการกำหนดค่าโปรไฟล์ โปรไฟล์เซสชันที่มีอยู่ แบบเชื่อมต่อเท่านั้น และ CDP ระยะไกลจะปฏิเสธการแทนที่นี้ เนื่องจาก OpenClaw ไม่ได้เปิดใช้งาน กระบวนการเบราว์เซอร์เหล่านั้น- บนโฮสต์ Linux ที่ไม่มี
DISPLAYหรือWAYLAND_DISPLAYโปรไฟล์ภายในเครื่องที่มีการจัดการ จะใช้โหมดไม่มีส่วนติดต่อผู้ใช้โดยอัตโนมัติเป็นค่าเริ่มต้น เมื่อทั้งสภาพแวดล้อมและการกำหนดค่า ระดับโปรไฟล์/ส่วนกลางไม่ได้เลือกโหมดแสดงหน้าต่างไว้อย่างชัดเจน ให้ใช้รูปแบบระดับเบราว์เซอร์ที่ไม่กำกวมopenclaw browser --json status;openclaw browser status --jsonที่ต่อท้าย ก็ใช้ได้เช่นกัน เนื่องจากstatusไม่ได้กำหนด--jsonของตัวเอง คำสั่งจะแสดงheadlessSourceเป็นenv,profile,config,request,linux-display-fallbackหรือdefault OPENCLAW_BROWSER_HEADLESS=1บังคับให้การเปิดใช้งานภายในเครื่องที่มีการจัดการใช้โหมดไม่มีส่วนติดต่อผู้ใช้สำหรับ กระบวนการปัจจุบันOPENCLAW_BROWSER_HEADLESS=0บังคับใช้โหมดแสดงหน้าต่างสำหรับการเริ่มต้น ตามปกติ และส่งคืนข้อผิดพลาดที่นำไปแก้ไขได้บนโฮสต์ Linux ที่ไม่มีเซิร์ฟเวอร์แสดงผล; คำขอstart --headlessที่ระบุชัดเจนยังคงมีผลเหนือกว่าสำหรับการเปิดใช้งานครั้งนั้น- เส้นทางควบคุมเบราว์เซอร์และไคลเอนต์แบบโปรแกรมจะเก็บ
errorที่มนุษย์อ่านได้ของข้อผิดพลาดเมื่อไม่มีจอแสดงผล และเปิดเผยเหตุผลที่คงที่no_display_for_headed_profileโดยdetailsของข้อผิดพลาดจะมีเพียงprofile,requestedHeadless,headlessSourceและdisplayPresentเพื่อให้ไคลเอนต์ API เลือกวิธีแก้ไขที่ถูกต้องได้โดยไม่ต้องจับคู่ข้อความ - สำหรับโปรไฟล์ภายในเครื่องที่มีการจัดการซึ่งกำลังทำงาน สถานะและ doctor จะสอบถามปลายทาง CDP
ระดับเบราว์เซอร์ของ Chrome เพื่อดูสถานะของตัวเรนเดอร์ แบ็กเอนด์ อุปกรณ์/ไดรเวอร์ ฟีเจอร์
วิธีแก้ปัญหาเฉพาะหน้าของไดรเวอร์ และความสามารถด้านวิดีโอแบบเร่งความเร็ว ผลลัพธ์จะ
ถูกแคชไว้สำหรับกระบวนการเบราว์เซอร์นั้น และเปิดเผยแบบเต็มผ่าน
openclaw browser --json statusการเรียกดูสถานะแบบพาสซีฟจะไม่เปิดใช้งาน Chrome เบราว์เซอร์แบบเซสชันที่มีอยู่ ส่วนขยาย CDP ระยะไกล และแซนด์บ็อกซ์ยังคงแยกจากกัน และจะไม่ได้รับการตรวจสอบผ่านเส้นทางโฮสต์ที่มีการจัดการนี้ - Chrome ที่มีการจัดการในโหมดไม่มีส่วนติดต่อผู้ใช้ยังคงใช้ค่าเริ่มต้น
--disable-gpuที่ระมัดระวัง การวินิจฉัยจะไม่เปิดใช้การเร่งความเร็ว เพิ่มการตั้งค่าการเร่งความเร็วส่วนกลาง หรืออนุญาตให้เบราว์เซอร์แซนด์บ็อกซ์เข้าถึงอุปกรณ์ - สามารถตั้งค่า
executablePathแบบส่วนกลางหรือแยกตามโปรไฟล์ภายในเครื่องที่มีการจัดการ ค่าระดับโปรไฟล์จะมีผลเหนือbrowser.executablePathดังนั้นโปรไฟล์ที่มีการจัดการต่างกันจึงสามารถเปิดใช้เบราว์เซอร์ที่ใช้ Chromium ต่างกันได้ ทั้งสองรูปแบบรองรับ~สำหรับไดเรกทอรีหลักของระบบปฏิบัติการ color(ทั้งระดับบนสุดและระดับโปรไฟล์) จะย้อมสี UI ของเบราว์เซอร์เพื่อให้เห็นว่าโปรไฟล์ใดกำลังทำงาน- โปรไฟล์เริ่มต้นคือ
openclaw(แบบสแตนด์อโลนที่มีการจัดการ) ใช้defaultProfile: "user"เพื่อเลือกใช้เบราว์เซอร์ของผู้ใช้ที่ลงชื่อเข้าใช้แล้ว - ลำดับการตรวจหาอัตโนมัติ: เบราว์เซอร์เริ่มต้นของระบบหากใช้ Chromium; มิฉะนั้นจะเป็น Chrome, Brave, Edge, Chromium, Chrome Canary
driver: "existing-session"ใช้ Chrome DevTools MCP แทน CDP โดยตรง โดยสามารถเชื่อมต่อผ่านการเชื่อมต่ออัตโนมัติของ Chrome MCP หรือผ่านcdpUrlเมื่อมีปลายทาง DevTools สำหรับเบราว์เซอร์ที่กำลังทำงานอยู่แล้วdriver: "extension"ควบคุม Chrome ที่ลงชื่อเข้าใช้แล้วผ่าน ส่วนขยาย Chrome ของ OpenClaw รีเลย์เป็นเจ้าของปลายทางลูปแบ็กของตนเอง ดังนั้นโปรไฟล์เหล่านี้จึงไม่รองรับcdpUrlนี่เป็นโหมดเบราว์เซอร์ที่ลงชื่อเข้าใช้แล้วเพียงโหมดเดียวที่ทำงานได้โดยไม่มีผู้ใช้อยู่หน้าเครื่อง- ตั้งค่า
browser.profiles.<name>.userDataDirเมื่อโปรไฟล์เซสชันที่มีอยู่ควรเชื่อมต่อกับโปรไฟล์ผู้ใช้ Chromium ที่ไม่ใช่ค่าเริ่มต้น (Brave, Edge เป็นต้น) พาธนี้ยังรองรับ~สำหรับไดเรกทอรีหลักของระบบปฏิบัติการ
ใช้ Brave หรือเบราว์เซอร์อื่นที่ใช้ Chromium
หากเบราว์เซอร์ เริ่มต้นของระบบ ใช้ Chromium (Chrome/Brave/Edge/ฯลฯ)
OpenClaw จะใช้โดยอัตโนมัติ ตั้งค่า browser.executablePath เพื่อแทนที่
การตรวจหาอัตโนมัติ ค่า executablePath ทั้งระดับบนสุดและระดับโปรไฟล์รองรับ ~
สำหรับไดเรกทอรีหลักของระบบปฏิบัติการ:
openclaw config set browser.executablePath "/usr/bin/google-chrome"openclaw config set browser.profiles.work.executablePath "/Applications/Google Chrome.app/Contents/MacOS/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",},}executablePath ระดับโปรไฟล์มีผลเฉพาะกับโปรไฟล์ภายในเครื่องที่มีการจัดการซึ่ง OpenClaw
เปิดใช้งานเท่านั้น โปรไฟล์ existing-session จะเชื่อมต่อกับเบราว์เซอร์ที่กำลังทำงานอยู่แล้ว
แทน ส่วนโปรไฟล์ CDP ระยะไกลจะใช้เบราว์เซอร์ที่อยู่เบื้องหลัง cdpUrl
การควบคุมภายในเครื่องเทียบกับระยะไกล
- การควบคุมภายในเครื่อง (ค่าเริ่มต้น): Gateway เริ่มบริการควบคุมลูปแบ็กและสามารถเปิดใช้งานเบราว์เซอร์ภายในเครื่องได้
- การควบคุมระยะไกล (โฮสต์โหนด): เรียกใช้โฮสต์โหนดบนเครื่องที่มีเบราว์เซอร์; Gateway จะส่งต่อการดำเนินการของเบราว์เซอร์ผ่านพร็อกซีไปยังเครื่องนั้น
- CDP ระยะไกล: ตั้งค่า
browser.profiles.<name>.cdpUrl(หรือbrowser.cdpUrl) เพื่อ เชื่อมต่อกับเบราว์เซอร์ระยะไกลที่ใช้ Chromium ในกรณีนี้ OpenClaw จะไม่เปิดใช้งานเบราว์เซอร์ภายในเครื่อง - สำหรับบริการ CDP ที่จัดการจากภายนอกบนลูปแบ็ก (เช่น Browserless ใน
Docker ที่เผยแพร่ไปยัง
127.0.0.1) ให้ตั้งค่าattachOnly: trueด้วย CDP ลูปแบ็ก ที่ไม่มีattachOnlyจะถือเป็นโปรไฟล์เบราว์เซอร์ภายในเครื่องที่ OpenClaw จัดการ headlessมีผลเฉพาะกับโปรไฟล์ภายในเครื่องที่มีการจัดการซึ่ง OpenClaw เปิดใช้งานเท่านั้น โดยจะไม่รีสตาร์ตหรือเปลี่ยนแปลงเบราว์เซอร์แบบเซสชันที่มีอยู่หรือ CDP ระยะไกลexecutablePathใช้กฎเดียวกันสำหรับโปรไฟล์ภายในเครื่องที่มีการจัดการ การเปลี่ยนค่านี้ใน โปรไฟล์ภายในเครื่องที่มีการจัดการซึ่งกำลังทำงาน จะทำเครื่องหมายโปรไฟล์นั้นเพื่อรีสตาร์ต/ปรับให้สอดคล้อง เพื่อให้ การเปิดใช้งานครั้งถัดไปใช้ไบนารีใหม่
ลักษณะการหยุดทำงานแตกต่างกันตามโหมดโปรไฟล์:
- โปรไฟล์ภายในเครื่องที่มีการจัดการ:
openclaw browser stopจะหยุดกระบวนการเบราว์เซอร์ที่ OpenClaw เปิดใช้งาน - โปรไฟล์แบบเชื่อมต่อเท่านั้นและ CDP ระยะไกล:
openclaw browser stopจะปิดเซสชัน ควบคุมที่ใช้งานอยู่และปล่อยการแทนที่การจำลอง Playwright/CDP (วิวพอร์ต, ชุดสี, โลแคล, เขตเวลา, โหมดออฟไลน์ และสถานะที่คล้ายกัน) แม้ว่า OpenClaw จะไม่ได้เปิดใช้งานกระบวนการเบราว์เซอร์ก็ตาม
URL ของ CDP ระยะไกลสามารถมีข้อมูลการรับรองความถูกต้องได้:
- โทเค็นในคิวรี (เช่น
https://provider.example?token=<token>) - การรับรองความถูกต้องแบบ HTTP Basic (เช่น
https://user:pass@provider.example)
OpenClaw จะรักษาข้อมูลการรับรองความถูกต้องไว้เมื่อเรียกปลายทาง /json/* และเมื่อเชื่อมต่อ
กับ CDP WebSocket ควรใช้ตัวแปรสภาพแวดล้อมหรือตัวจัดการข้อมูลลับสำหรับ
โทเค็น แทนการคอมมิตลงในไฟล์การกำหนดค่า
พร็อกซีเบราว์เซอร์ของ Node (ค่าเริ่มต้นที่ไม่ต้องกำหนดค่า)
หากคุณเรียกใช้ โฮสต์ Node บนเครื่องที่มีเบราว์เซอร์ OpenClaw สามารถ กำหนดเส้นทางการเรียกใช้เครื่องมือเบราว์เซอร์ไปยัง Node นั้นโดยอัตโนมัติ โดยไม่ต้องกำหนดค่าเบราว์เซอร์เพิ่มเติม นี่เป็นเส้นทางเริ่มต้นสำหรับ Gateway ระยะไกล
หมายเหตุ:
- โฮสต์ Node เปิดให้เข้าถึงเซิร์ฟเวอร์ควบคุมเบราว์เซอร์ภายในเครื่องผ่าน คำสั่งพร็อกซี
- โปรไฟล์มาจากการกำหนดค่า
browser.profilesของ Node เอง (เหมือนกับการใช้งานภายในเครื่อง) - คำสั่งพร็อกซีไม่อนุญาตให้เปลี่ยนแปลงโปรไฟล์แบบถาวร (
create-profile,delete-profile,reset-profile) ไม่ว่าallowProfilesจะเป็นค่าใด ให้ทำการเปลี่ยนแปลงเหล่านั้นบน Node โดยตรง nodeHost.browserProxy.allowProfilesเป็นตัวเลือก เว้นว่างไว้เพื่อใช้ลักษณะการทำงานแบบเดิม/ค่าเริ่มต้น: โปรไฟล์ที่กำหนดค่าไว้ทั้งหมดยังคงเข้าถึงได้ผ่านพร็อกซี- หากตั้งค่า
nodeHost.browserProxy.allowProfilesOpenClaw จะถือว่าค่านี้เป็นขอบเขตสิทธิ์ขั้นต่ำที่จำกัดชื่อโปรไฟล์ซึ่งพร็อกซีสามารถกำหนดเป็นเป้าหมายได้ - ปิดใช้งานหากไม่ต้องการ:
- บน Node:
nodeHost.browserProxy.enabled=false - บน Gateway:
gateway.nodes.browser.mode="off"(รองรับ"auto"เพื่อเลือก Node เบราว์เซอร์ที่เชื่อมต่ออยู่เพียง Node เดียว หรือ"manual"เพื่อบังคับให้ระบุพารามิเตอร์ Node อย่างชัดเจนด้วย)
- บน Node:
Browserless (CDP ระยะไกลแบบโฮสต์)
Browserless เป็นบริการ Chromium แบบโฮสต์ที่เปิดเผย 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>ด้วยโทเค็น Browserless จริงของคุณ - เลือกปลายทางภูมิภาคที่ตรงกับบัญชี Browserless ของคุณ (ดูเอกสารของบริการ)
- หาก Browserless ให้ URL ฐานแบบ HTTPS คุณสามารถแปลงเป็น
wss://เพื่อเชื่อมต่อ CDP โดยตรง หรือคง URL แบบ HTTPS ไว้และให้ 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", }, }, },}กระบวนการ OpenClaw ต้องเข้าถึงที่อยู่ใน browser.profiles.browserless.cdpUrl ได้
นอกจากนี้ Browserless ต้องประกาศปลายทางที่ตรงกันและเข้าถึงได้ด้วย
ให้ตั้งค่า EXTERNAL ของ Browserless เป็นฐาน WebSocket เดียวกันที่ OpenClaw เข้าถึงได้จากภายนอก
เช่น ws://127.0.0.1:3000, ws://browserless:3000 หรือที่อยู่เครือข่าย Docker ส่วนตัว
ที่เสถียร หาก /json/version ส่งคืน webSocketDebuggerUrl ซึ่งชี้ไปยัง
ที่อยู่ที่ OpenClaw เข้าถึงไม่ได้ CDP HTTP อาจดูเหมือนทำงานปกติ แต่การเชื่อมต่อ
ผ่าน WebSocket ยังคงล้มเหลว
อย่าปล่อย attachOnly ไว้โดยไม่ตั้งค่าสำหรับโปรไฟล์ Browserless แบบลูปแบ็ก หากไม่มี
attachOnly OpenClaw จะถือว่าพอร์ตลูปแบ็กเป็นโปรไฟล์เบราว์เซอร์ภายในเครื่อง
ที่มีการจัดการ และอาจรายงานว่าพอร์ตถูกใช้งานอยู่แต่ OpenClaw ไม่ได้เป็นเจ้าของ
ผู้ให้บริการ CDP ผ่าน WebSocket โดยตรง
บริการเบราว์เซอร์แบบโฮสต์บางรายเปิดเผยปลายทาง WebSocket โดยตรง แทน
การค้นหา CDP แบบ HTTP มาตรฐาน (/json/version) OpenClaw รองรับ URL ของ CDP สามรูปแบบ
และเลือกกลยุทธ์การเชื่อมต่อที่เหมาะสมโดยอัตโนมัติ:
- การค้นหาผ่าน HTTP(S) -
http://host[:port]หรือhttps://host[:port]OpenClaw เรียก/json/versionเพื่อค้นหา URL ดีบักเกอร์ WebSocket แล้วจึง เชื่อมต่อ โดยไม่มีการใช้ WebSocket เป็นทางเลือกสำรอง - ปลายทาง WebSocket โดยตรง -
ws://host[:port]/devtools/<kind>/<id>หรือwss://...ที่มีเส้นทาง/devtools/browser|page|worker|shared_worker|service_worker/<id>OpenClaw เชื่อมต่อโดยตรงผ่านการจับมือ WebSocket และข้าม/json/versionทั้งหมด - ราก WebSocket เปล่า -
ws://host[:port]หรือwss://host[:port]ที่ไม่มี เส้นทาง/devtools/...(เช่น Browserless, Browserbase) OpenClaw จะลองค้นหา/json/versionผ่าน HTTP ก่อน (ปรับรูปแบบสคีมเป็นhttp/https); หากการค้นหาส่งคืนwebSocketDebuggerUrlระบบจะใช้ค่านั้น มิฉะนั้น OpenClaw จะเปลี่ยนไปใช้การจับมือ WebSocket โดยตรงที่รากเปล่าเป็นทางเลือกสำรอง หากปลายทาง WebSocket ที่ประกาศปฏิเสธการจับมือ CDP แต่รากเปล่าที่กำหนดค่าไว้ ยอมรับ OpenClaw จะเปลี่ยนไปใช้รากนั้นเป็นทางเลือกสำรองด้วย วิธีนี้ทำให้ws://แบบเปล่า ที่ชี้ไปยัง Chrome ภายในเครื่องยังคงเชื่อมต่อได้ เนื่องจาก Chrome ยอมรับการอัปเกรด WebSocket เฉพาะบนเส้นทางต่อเป้าหมายที่ระบุจาก/json/versionขณะที่ผู้ให้บริการ แบบโฮสต์ยังสามารถใช้ปลายทาง WebSocket รากของตนได้ เมื่อปลายทางการค้นหา ประกาศ URL อายุสั้นที่ไม่เหมาะกับ Playwright CDP
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 จาก แดชบอร์ด Overview
- แทนที่
<BROWSERBASE_API_KEY>ด้วยคีย์ API ของ Browserbase จริง - Browserbase สร้างเซสชันเบราว์เซอร์โดยอัตโนมัติเมื่อเชื่อมต่อ WebSocket จึงไม่ จำเป็นต้องสร้างเซสชันด้วยตนเอง
- ดูราคาสำหรับขีดจำกัดแพ็กเกจฟรีและแพ็กเกจแบบชำระเงินในปัจจุบัน
- ดูเอกสาร Browserbaseสำหรับข้อมูลอ้างอิง API ฉบับเต็ม คู่มือ SDK และตัวอย่างการผสานรวม
Notte
Notte เป็นแพลตฟอร์มคลาวด์สำหรับเรียกใช้เบราว์เซอร์ แบบไม่มีส่วนติดต่อ โดยมีคุณสมบัติซ่อนตัว พร็อกซีสำหรับที่อยู่อาศัย และ Gateway WebSocket แบบเนทีฟสำหรับ CDP ในตัว
{ 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>ด้วยคีย์ API ของ Notte จริง - Notte สร้างเซสชันเบราว์เซอร์โดยอัตโนมัติเมื่อเชื่อมต่อ WebSocket จึงไม่จำเป็น ต้องสร้างเซสชันด้วยตนเอง เซสชันจะถูกทำลายเมื่อ WebSocket ตัดการเชื่อมต่อ
- ดูราคาสำหรับขีดจำกัดแพ็กเกจฟรีและแพ็กเกจแบบชำระเงินในปัจจุบัน
- ดูเอกสาร Notteสำหรับข้อมูลอ้างอิง API ฉบับเต็ม คู่มือ SDK และตัวอย่างการผสานรวม
ความปลอดภัย
แนวคิดสำคัญ:
- การควบคุมเบราว์เซอร์จำกัดอยู่เฉพาะลูปแบ็ก การเข้าถึงดำเนินการผ่านการตรวจสอบสิทธิ์ของ Gateway หรือการจับคู่ Node
- API HTTP ของเบราว์เซอร์ลูปแบ็กแบบสแตนด์อโลนใช้ การตรวจสอบสิทธิ์ด้วยข้อมูลลับที่ใช้ร่วมกันเท่านั้น:
การตรวจสอบสิทธิ์แบบ bearer ด้วยโทเค็น Gateway,
x-openclaw-passwordหรือการตรวจสอบสิทธิ์ HTTP Basic ด้วย รหัสผ่าน Gateway ที่กำหนดค่าไว้ - ส่วนหัวระบุตัวตนของ Tailscale Serve และ
gateway.auth.mode: "trusted-proxy"ไม่ ตรวจสอบสิทธิ์ API เบราว์เซอร์ลูปแบ็กแบบสแตนด์อโลนนี้ - หากเปิดใช้การควบคุมเบราว์เซอร์และไม่ได้กำหนดค่าการตรวจสอบสิทธิ์ด้วยข้อมูลลับที่ใช้ร่วมกัน OpenClaw
จะสร้างและเก็บข้อมูลรับรองสำหรับการควบคุมเบราว์เซอร์โดยอัตโนมัติเมื่อเริ่มทำงาน:
เป็นโทเค็นเมื่อ
gateway.auth.modeเป็นnoneหรือเป็นรหัสผ่านเมื่อค่าเป็นtrusted-proxy(เก็บผ่านgateway.auth.passwordเพื่อให้ไคลเอนต์ลูปแบ็ก นอกกระบวนการสามารถค้นหาได้) ระบบจะข้ามการสร้างอัตโนมัติเมื่อมีการกำหนดค่า ข้อมูลรับรองแบบสตริงอย่างชัดเจนสำหรับโหมดนั้นแล้ว หรือเมื่อgateway.auth.modeเป็นpassword - กำหนดค่า
gateway.auth.token,gateway.auth.password,OPENCLAW_GATEWAY_TOKENหรือOPENCLAW_GATEWAY_PASSWORDอย่างชัดเจน หากต้องการข้อมูลลับที่เสถียรและควบคุมเอง แทนข้อมูลลับที่ระบบสร้างขึ้น
คำแนะนำสำหรับ CDP ระยะไกล:
- ควรเลือกใช้ปลายทางที่เข้ารหัส (HTTPS หรือ WSS) และโทเค็นอายุสั้นเมื่อทำได้
- หลีกเลี่ยงการฝังโทเค็นอายุยาวลงในไฟล์การกำหนดค่าโดยตรง
- ให้ Gateway และโฮสต์ Node ทั้งหมดอยู่ในเครือข่ายส่วนตัว (Tailscale) และหลีกเลี่ยงการเปิดเผยต่อสาธารณะ
- ปฏิบัติต่อ URL/โทเค็น CDP ระยะไกลเสมือนข้อมูลลับ ควรใช้ตัวแปรสภาพแวดล้อมหรือตัวจัดการข้อมูลลับ
โปรไฟล์ (หลายเบราว์เซอร์)
OpenClaw รองรับโปรไฟล์ที่มีชื่อหลายรายการ (การกำหนดค่าการกำหนดเส้นทาง) โปรไฟล์อาจเป็น:
- จัดการโดย OpenClaw: อินสแตนซ์เบราว์เซอร์ที่ใช้ Chromium โดยเฉพาะ พร้อมไดเรกทอรีข้อมูลผู้ใช้และพอร์ต CDP ของตนเอง
- ระยะไกล: URL ของ CDP ที่ระบุอย่างชัดเจน (เบราว์เซอร์ที่ใช้ Chromium ซึ่งทำงานอยู่ที่อื่น)
- เซสชันที่มีอยู่: โปรไฟล์ Chrome ที่มีอยู่ของคุณผ่านการเชื่อมต่ออัตโนมัติของ Chrome DevTools MCP
ค่าเริ่มต้น:
- โปรไฟล์
openclawจะถูกสร้างโดยอัตโนมัติหากไม่มี - โปรไฟล์
userมีมาให้ในตัวสำหรับเชื่อมต่อเซสชัน Chrome MCP ที่มีอยู่ - โปรไฟล์เซสชันที่มีอยู่นอกเหนือจาก
userต้องเปิดใช้โดยสมัครใจ ให้สร้างด้วย--driver existing-session - พอร์ต CDP ภายในเครื่องจะถูกจัดสรรจากช่วง 18800-18899 ตามค่าเริ่มต้น
- การลบโปรไฟล์จะย้ายไดเรกทอรีข้อมูลภายในเครื่องไปยังถังขยะ
ปลายทางควบคุมทั้งหมดรองรับ ?profile=<name>; CLI ใช้ --browser-profile
เซสชันที่มีอยู่ผ่าน Chrome DevTools MCP
OpenClaw ยังสามารถเชื่อมต่อกับโปรไฟล์เบราว์เซอร์ที่ใช้ Chromium ซึ่งกำลังทำงานอยู่ผ่าน เซิร์ฟเวอร์ Chrome DevTools MCP อย่างเป็นทางการ โดยใช้แท็บและสถานะการเข้าสู่ระบบ ที่เปิดอยู่แล้วในโปรไฟล์เบราว์เซอร์นั้นซ้ำ
ข้อมูลเบื้องหลังและเอกสารอ้างอิงการตั้งค่าอย่างเป็นทางการ:
- Chrome for Developers: ใช้ Chrome DevTools MCP กับเซสชันเบราว์เซอร์ของคุณ
- README ของ Chrome DevTools MCP
โปรไฟล์ในตัว: user สร้างโปรไฟล์เซสชันที่มีอยู่แบบกำหนดเอง หาก
ต้องการชื่อ สี หรือไดเรกทอรีข้อมูลเบราว์เซอร์ที่แตกต่างออกไป
ตามค่าเริ่มต้น โปรไฟล์ user ในตัวจะใช้การเชื่อมต่ออัตโนมัติของ Chrome MCP ซึ่ง
กำหนดเป้าหมายไปยังโปรไฟล์ Google Chrome เริ่มต้นภายในเครื่อง ใช้ userDataDir สำหรับ Brave,
Edge, Chromium หรือโปรไฟล์ Chrome ที่ไม่ใช่ค่าเริ่มต้น ~ จะขยายเป็นไดเรกทอรีหลัก
ของระบบปฏิบัติการ:
{ browser: { profiles: { brave: { driver: "existing-session", attachOnly: true, userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", color: "#FB542B", }, }, },}จากนั้นในเบราว์เซอร์ที่ตรงกัน:
- เปิดหน้าตรวจสอบของเบราว์เซอร์นั้นสำหรับการดีบักระยะไกล
- เปิดใช้การดีบักระยะไกล
- เปิดเบราว์เซอร์ค้างไว้และอนุมัติข้อความแจ้งการเชื่อมต่อเมื่อ OpenClaw เชื่อมต่อ
หน้าตรวจสอบที่ใช้บ่อย:
- Chrome:
chrome://inspect/#remote-debugging - Brave:
brave://inspect/#remote-debugging - Edge:
edge://inspect/#remote-debugging
การทดสอบเบื้องต้นสำหรับการเชื่อมต่อจริง:
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+ - เปิดใช้การดีบักระยะไกลในหน้าตรวจสอบของเบราว์เซอร์นั้น
- เบราว์เซอร์แสดงพรอมต์ขอความยินยอมในการแนบและได้ยอมรับพรอมต์แล้ว
- หาก Chrome เริ่มทำงานโดยระบุ
--remote-debugging-portอย่างชัดเจน ให้ตั้งค่าbrowser.profiles.<name>.cdpUrlเป็นปลายทาง DevTools นั้นแทนการพึ่งพา การเชื่อมต่ออัตโนมัติของ Chrome MCP openclaw doctorย้ายข้อมูลการกำหนดค่าเบราว์เซอร์แบบเก่าที่ใช้ส่วนขยาย และตรวจสอบว่า มีการติดตั้ง Chrome ภายในเครื่องสำหรับโปรไฟล์การเชื่อมต่ออัตโนมัติเริ่มต้น แต่ไม่สามารถ เปิดใช้การดีบักระยะไกลฝั่งเบราว์เซอร์ให้ได้
การใช้งานโดยเอเจนต์:
- ใช้
profile="user"เมื่อต้องการสถานะเบราว์เซอร์ที่ผู้ใช้เข้าสู่ระบบไว้ - หากใช้โปรไฟล์เซสชันที่มีอยู่แบบกำหนดเอง ให้ส่งชื่อโปรไฟล์นั้นอย่างชัดเจน
- เลือกโหมดนี้เฉพาะเมื่อผู้ใช้อยู่ที่คอมพิวเตอร์เพื่ออนุมัติพรอมต์ การแนบ
- โฮสต์ Gateway หรือ Node สามารถเรียกใช้
npx chrome-devtools-mcp@latest --autoConnectได้
หมายเหตุ:
- เส้นทางนี้มีความเสี่ยงสูงกว่าโปรไฟล์
openclawที่แยกสภาพแวดล้อม เพราะสามารถ ดำเนินการภายในเซสชันเบราว์เซอร์ที่เข้าสู่ระบบไว้ - OpenClaw ไม่เปิดเบราว์เซอร์สำหรับไดรเวอร์นี้ แต่จะแนบเท่านั้น
- OpenClaw ใช้โฟลว์
--autoConnectอย่างเป็นทางการของ Chrome DevTools MCP ที่นี่ หาก ตั้งค่าuserDataDirระบบจะส่งผ่านค่านี้เพื่อกำหนดเป้าหมายไปยังไดเรกทอรีข้อมูลผู้ใช้นั้น - เซสชันที่มีอยู่สามารถแนบกับโฮสต์ที่เลือกหรือผ่าน Node เบราว์เซอร์ที่เชื่อมต่ออยู่ หาก Chrome อยู่ที่อื่นและไม่มี Node เบราว์เซอร์เชื่อมต่ออยู่ ให้ใช้ CDP ระยะไกลหรือโฮสต์ Node แทน
- เป้าหมาย Chrome MCP และ refs ของสแนปช็อตมีขอบเขตอยู่ภายในกระบวนการย่อย MCP หนึ่งกระบวนการ หลังจาก
กระบวนการนั้นเริ่มใหม่ ให้เรียกใช้
browser tabsอีกครั้ง เลือกเป้าหมายใหม่อย่างชัดเจน ก่อนทำงานเฉพาะเป้าหมาย และถ่ายสแนปช็อตใหม่ก่อนใช้ refs แต่ละ ref ใช้ได้เฉพาะกับเป้าหมายและสแนปช็อตล่าสุดของตนเท่านั้น นามแฝงเก่าจะไม่ ถูกโอนไปยังแท็บทดแทน แม้ว่า URL จะตรงกัน - ปัจจุบัน Chrome DevTools MCP กำหนดเส้นทางเครื่องมือหน้าเว็บโดยใช้ ID หน้าแบบตัวเลข ภายในกระบวนการ แฮนเดิลที่มีขอบเขตระดับกระบวนการป้องกันการนำกลับมาใช้ข้ามการแทนที่กระบวนการย่อย แต่ การแทนที่บริบทเบราว์เซอร์ภายในกระบวนการระหว่างการเรียกเครื่องมือที่อยู่ติดกันยังคง เปลี่ยนเป้าหมายของการดำเนินการได้ การกำหนดเส้นทางแบบอะตอมโดยสมบูรณ์ต้องอาศัยการรองรับเครื่องมือหน้าเว็บจากต้นทาง สำหรับ ID เป้าหมายที่คงที่
การเรียกใช้ Chrome MCP แบบกำหนดเอง
แทนที่เซิร์ฟเวอร์ Chrome DevTools MCP ที่เรียกใช้สำหรับแต่ละโปรไฟล์ เมื่อโฟลว์
npx chrome-devtools-mcp@latest เริ่มต้นไม่ตรงกับความต้องการ (โฮสต์ออฟไลน์
เวอร์ชันที่ตรึงไว้ ไบนารีที่รวมมากับระบบ):
| ฟิลด์ | การทำงาน |
|---|---|
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
ระบบจะละเว้น userDataDir สำหรับการเรียกใช้ Chrome MCP เนื่องจาก Chrome MCP จะแนบกับ
เบราว์เซอร์ที่กำลังทำงานอยู่เบื้องหลังปลายทาง แทนการเปิดไดเรกทอรี
โปรไฟล์
ข้อจำกัดของฟีเจอร์เซสชันที่มีอยู่
เมื่อเทียบกับโปรไฟล์ openclaw ที่มีการจัดการ ไดรเวอร์เซสชันที่มีอยู่มีข้อจำกัดมากกว่า:
- ภาพหน้าจอ - การจับภาพหน้าและการจับภาพองค์ประกอบ
--refใช้งานได้ แต่ตัวเลือก CSS--elementใช้ไม่ได้ ไม่จำเป็นต้องใช้ Playwright สำหรับภาพหน้าจอของหน้าหรือองค์ประกอบที่อ้างอิงด้วย ref (--full-pageใช้ร่วมกับ--refหรือ--elementไม่ได้ในทุกโปรไฟล์ ไม่ใช่เฉพาะเซสชันที่มีอยู่) - การดำเนินการ -
click,type,hover,scrollIntoView,dragและselectต้องใช้ refs ของสแนปช็อต (ไม่รองรับตัวเลือก CSS)click-coordsคลิกพิกัดในวิวพอร์ตที่มองเห็นได้และไม่ต้องใช้ ref ของสแนปช็อตclickรองรับเฉพาะปุ่มซ้าย (ไม่รองรับการแทนที่ปุ่มหรือปุ่มปรับแต่ง)typeไม่รองรับslowly=true; ให้ใช้fillหรือpresspressไม่รองรับdelayMstype,hover,scrollIntoView,drag,selectและfillไม่รองรับการแทนที่timeoutMsต่อการเรียกแต่ละครั้ง แต่evaluateรองรับ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แบบดิบ เอเจนต์ควรนำ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
เฉพาะลูปแบ็ก ขนาดเล็ก พร้อม CLI openclaw browser ที่สอดคล้องกัน (สแนปช็อต refs ความสามารถเสริม
ในการรอ เอาต์พุต JSON และเวิร์กโฟลว์การดีบัก) โปรดดูข้อมูลอ้างอิงฉบับเต็มที่
API ควบคุมเบราว์เซอร์
การแก้ไขปัญหา
สำหรับปัญหาเฉพาะ Linux (โดยเฉพาะ Chromium แบบ snap) โปรดดู การแก้ไขปัญหาเบราว์เซอร์
สำหรับการตั้งค่าแยกโฮสต์ระหว่าง 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>Port <port> is in use for profile "<name>" but not by openclawเมื่อกำหนดค่าบริการ CDP ภายนอกแบบ ลูปแบ็กโดยไม่มีattachOnly: true
- การบล็อก SSRF ในการนำทาง:
- โฟลว์
open,navigate, สแนปช็อต หรือการเปิดแท็บล้มเหลวด้วยข้อผิดพลาดของนโยบายเบราว์เซอร์/เครือข่าย ขณะที่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แบบลูปแบ็กภายในเครื่อง การตรวจสอบสถานะ CDP จะข้ามการบังคับใช้การเข้าถึงตามนโยบาย SSRF ของเบราว์เซอร์โดยตั้งใจ สำหรับระนาบควบคุมภายในเครื่องของ OpenClaw เอง - การป้องกันการนำทางแยกออกจากกัน ผลลัพธ์
startหรือtabsที่สำเร็จไม่ได้หมายความว่าเป้าหมายopenหรือnavigateในภายหลังจะได้รับอนุญาต
คำแนะนำด้านความปลอดภัย:
- อย่า ผ่อนคลายนโยบาย SSRF ของเบราว์เซอร์โดยค่าเริ่มต้น
- ควรใช้ข้อยกเว้นโฮสต์แบบจำกัด เช่น
hostnameAllowlistหรือallowedHostnamesแทนการอนุญาตเข้าถึงเครือข่ายส่วนตัวแบบกว้าง - ใช้
dangerouslyAllowPrivateNetwork: trueเฉพาะในสภาพแวดล้อมที่เชื่อถือได้โดยตั้งใจ ซึ่งจำเป็นต้องใช้การเข้าถึงเครือข่ายส่วนตัวจากเบราว์เซอร์และผ่านการตรวจสอบแล้ว
เครื่องมือเอเจนต์ + วิธีการทำงานของการควบคุม
เอเจนต์ได้รับ เครื่องมือเดียว สำหรับระบบอัตโนมัติของเบราว์เซอร์:
browser- ตรวจสอบ/สถานะ/เริ่ม/หยุด/แท็บ/เปิด/โฟกัส/ปิด/สแนปช็อต/ภาพหน้าจอ/นำทาง/ดำเนินการ
การจับคู่การทำงาน:
browser snapshotส่งคืนโครงสร้าง UI ที่เสถียร (AI หรือ ARIA)browser actใช้ IDrefจากสแนปช็อตเพื่อคลิก/พิมพ์/ลาก/เลือกbrowser screenshotจับภาพพิกเซล (ทั้งหน้า องค์ประกอบ หรือการอ้างอิงที่มีป้ายกำกับ)browser doctorตรวจสอบความพร้อมของ Gateway, Plugin, โปรไฟล์, เบราว์เซอร์ และแท็บbrowserรองรับ:profileเพื่อเลือกโปรไฟล์เบราว์เซอร์ที่มีชื่อ (openclaw, chrome หรือ CDP ระยะไกล)target(sandbox|host|node) เพื่อเลือกตำแหน่งที่เบราว์เซอร์ทำงานอยู่- ในเซสชันแบบแซนด์บ็อกซ์
target: "host"ต้องใช้agents.defaults.sandbox.browser.allowHostControl=true - หากละ
target: เซสชันแบบแซนด์บ็อกซ์จะใช้ค่าเริ่มต้นเป็นsandboxส่วนเซสชันที่ไม่ใช่แบบแซนด์บ็อกซ์จะใช้ค่าเริ่มต้นเป็นhost - หากมี Node ที่รองรับเบราว์เซอร์เชื่อมต่ออยู่ เครื่องมืออาจกำหนดเส้นทางไปยัง Node นั้นโดยอัตโนมัติ เว้นแต่จะตรึง
target="host"หรือtarget="node"
วิธีนี้ช่วยให้เอเจนต์ทำงานได้อย่างกำหนดแน่นอนและหลีกเลี่ยงตัวเลือกองค์ประกอบที่เปราะบาง
เนื้อหาที่เกี่ยวข้อง
- ภาพรวมเครื่องมือ - เครื่องมือทั้งหมดที่พร้อมใช้งานสำหรับเอเจนต์
- การทำแซนด์บ็อกซ์ - การควบคุมเบราว์เซอร์ในสภาพแวดล้อมแบบแซนด์บ็อกซ์
- ความปลอดภัย - ความเสี่ยงและการเสริมความปลอดภัยสำหรับการควบคุมเบราว์เซอร์