openclaw browser,
dan pola skrip (snapshot, ref, penantian, alur debug).
API Kontrol (opsional)
Khusus untuk integrasi lokal, Gateway menyediakan API HTTP loopback sederhana. Server mandiri ini bersifat opsional — tetapkan variabel lingkunganOPENCLAW_EAGER_BROWSER_CONTROL_SERVER=1 di lingkungan layanan gateway
dan mulai ulang gateway sebelum endpoint HTTP tersedia. Tanpa
variabel ini, runtime kontrol browser tetap berfungsi melalui CLI dan
alat agen, tetapi tidak ada yang mendengarkan pada port kontrol loopback.
- Status/mulai/hentikan:
GET /,GET /doctor,POST /start,POST /stop,POST /reset-profile - Profil:
GET /profiles,POST /profiles/create,DELETE /profiles/:name - Tab:
GET /tabs,POST /tabs/open,POST /tabs/focus,DELETE /tabs/:targetId,POST /tabs/action - Snapshot/tangkapan layar:
GET /snapshot,POST /screenshot - Tindakan:
POST /navigate,POST /act - Hook:
POST /hooks/file-chooser,POST /hooks/dialog - Unduhan:
POST /download,POST /wait/download - Izin:
POST /permissions/grant - Debug:
GET /console,POST /pdf - Debug:
GET /errors,GET /requests,GET /dialogs,POST /trace/start,POST /trace/stop,POST /highlight - Jaringan:
POST /response/body - Status:
GET /cookies,POST /cookies/set,POST /cookies/clear - Status:
GET /storage/:kind,POST /storage/:kind/set,POST /storage/:kind/clear - Pengaturan:
POST /set/offline,POST /set/headers,POST /set/credentials,POST /set/geolocation,POST /set/media,POST /set/timezone,POST /set/locale,POST /set/device
POST /tabs/action adalah bentuk batch yang digunakan CLI secara internal untuk
subperintah browser tab ({"action":"new"|"label"|"select"|"close"|"list", ...});
utamakan rute tab dengan satu tujuan di atas saat membuat skrip secara langsung.
Semua endpoint menerima ?profile=<name>. POST /start?headless=true meminta
peluncuran headless sekali pakai untuk profil lokal terkelola tanpa mengubah konfigurasi
browser yang dipertahankan; profil hanya-lampirkan, CDP jarak jauh, dan sesi yang sudah ada menolak
penggantian tersebut karena OpenClaw tidak meluncurkan proses browser itu.
Untuk endpoint tab, targetId adalah nama bidang kompatibilitas. Sebaiknya teruskan
suggestedTargetId dari GET /tabs atau POST /tabs/open; label dan handle tabId
seperti t1 juga diterima. ID target CDP mentah dan prefiks ID target mentah yang unik
tetap berfungsi, tetapi merupakan handle diagnostik yang tidak stabil.
Jika autentikasi gateway dengan rahasia bersama dikonfigurasi, rute HTTP browser juga memerlukan autentikasi:
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>atau autentikasi HTTP Basic dengan kata sandi tersebut
- API browser loopback mandiri ini tidak menggunakan header identitas proksi tepercaya atau Tailscale Serve.
- Jika
gateway.auth.modeadalahnoneatautrusted-proxy, rute browser loopback ini tidak mewarisi mode yang membawa identitas tersebut; pertahankan agar hanya dapat diakses melalui loopback.
Kontrak galat /act
POST /act menggunakan respons galat terstruktur untuk kegagalan validasi tingkat rute dan
kebijakan:
code saat ini:
ACT_KIND_REQUIRED(HTTP 400):kindtidak ada atau tidak dikenali.ACT_INVALID_REQUEST(HTTP 400): payload tindakan gagal dinormalisasi atau divalidasi.ACT_SELECTOR_UNSUPPORTED(HTTP 400):selectordigunakan dengan jenis tindakan yang tidak didukung.ACT_EVALUATE_DISABLED(HTTP 403):evaluate(atauwait --fn) dinonaktifkan oleh konfigurasi.ACT_TARGET_ID_MISMATCH(HTTP 403):targetIdtingkat atas atau berbentuk batch bertentangan dengan target permintaan.ACT_EXISTING_SESSION_UNSUPPORTED(HTTP 501): tindakan tidak didukung untuk profil sesi yang sudah ada.
{ "error": "<message>" } tanpa
bidang code.
Persyaratan Playwright
Beberapa fitur (navigasi/tindakan/snapshot AI/snapshot peran, tangkapan layar elemen, PDF) memerlukan Playwright. Jika Playwright tidak terpasang, endpoint tersebut mengembalikan galat 501 yang jelas. Yang tetap berfungsi tanpa Playwright:- Snapshot ARIA
- Snapshot aksesibilitas bergaya peran (
--interactive,--compact,--depth,--efficient) saat WebSocket CDP per tab tersedia. Ini merupakan fallback untuk inspeksi dan penemuan ref; Playwright tetap menjadi mesin tindakan utama. - Tangkapan layar halaman untuk browser
openclawterkelola saat WebSocket CDP per tab tersedia - Tangkapan layar halaman untuk profil
existing-session/ Chrome MCP - Tangkapan layar berbasis ref
existing-session(--ref) dari keluaran snapshot
navigateact- Snapshot AI yang bergantung pada format snapshot AI native Playwright
- Tangkapan layar elemen dengan pemilih CSS (
--element) - Ekspor PDF browser lengkap
--full-page; rute mengembalikan fullPage is not supported for element screenshots.
Jika Anda melihat Playwright is not available in this gateway build, Gateway yang dikemas
tidak memiliki dependensi runtime browser inti. Pasang ulang atau perbarui
OpenClaw, lalu mulai ulang gateway. Untuk Docker, pasang juga biner browser
Chromium seperti ditunjukkan di bawah.
Pemasangan Playwright di Docker
Jika Gateway Anda berjalan di Docker, hindarinpx playwright (konflik penggantian npm).
Untuk image khusus, sertakan Chromium di dalam image:
PLAYWRIGHT_BROWSERS_PATH (misalnya,
/home/node/.cache/ms-playwright) dan pastikan /home/node dipertahankan melalui
OPENCLAW_HOME_VOLUME atau bind mount. OpenClaw secara otomatis mendeteksi
Chromium yang dipertahankan di Linux. Lihat Docker.
Cara kerjanya (internal)
Server kontrol loopback sederhana menerima permintaan HTTP dan terhubung ke browser berbasis Chromium melalui CDP. Tindakan lanjutan (klik/ketik/snapshot/PDF) dijalankan melalui Playwright di atas CDP; jika Playwright tidak tersedia, hanya operasi non-Playwright yang dapat digunakan. Agen melihat satu antarmuka stabil sementara browser dan profil lokal/jarak jauh dapat saling berganti secara bebas di baliknya.Referensi cepat CLI
Semua perintah menerima--browser-profile <name> untuk menargetkan profil tertentu, dan --json untuk keluaran yang dapat dibaca mesin.
Dasar: status, tab, buka/fokus/tutup
Dasar: status, tab, buka/fokus/tutup
Profil: daftar, buat, hapus
Profil: daftar, buat, hapus
Inspeksi: tangkapan layar, snapshot, konsol, galat, permintaan
Inspeksi: tangkapan layar, snapshot, konsol, galat, permintaan
- Tool
browseryang digunakan agen menyediakanaction=download(refdanpathwajib) sertaaction=waitfordownload(pathopsional). Keduanya mengembalikan URL unduhan yang tersimpan, nama file yang disarankan, dan jalur lokal yang dilindungi. Intersepsi unduhan eksplisit tersedia untuk profil Playwright terkelola; profil sesi yang sudah ada mengembalikan galat operasi yang tidak didukung. - Utamakan unggahan pemilih atomik: teruskan pemicu
--refbersama unggahan agar OpenClaw menyiapkan dan mengeklik dalam satu permintaan.uploadyang hanya berisi jalur tetap didukung jika pemicu berikutnya memang disengaja. Gunakan--input-refatau--elementuntuk mengatur input file secara langsung.dialogadalah panggilan penyiapan; jalankan sebelum klik/penekanan yang memicu dialog. Jika suatu tindakan membuka modal, respons tindakan menyertakanblockedByDialogdanbrowserState.dialogs.pending; teruskandialogIdtersebut untuk merespons secara langsung. Dialog yang ditangani di luar OpenClaw muncul di bawahbrowserState.dialogs.recent. click/type/dan seterusnya memerlukanrefdarisnapshot(12numerik, ref perane12, atau ref ARIA yang dapat ditindaklanjutiax12). Selektor CSS sengaja tidak didukung untuk tindakan. Gunakanclick-coordsketika posisi viewport yang terlihat adalah satu-satunya target yang andal.- Jalur unduhan dan pelacakan dibatasi ke akar sementara OpenClaw:
/tmp/openclaw{,/downloads}(fallback:${os.tmpdir()}/openclaw/...). uploadmenerima file dari akar unggahan sementara OpenClaw dan media masuk yang dikelola OpenClaw. Media masuk terkelola dapat dirujuk sebagaimedia://inbound/<id>,media/inbound/<id>yang relatif terhadap sandbox, atau jalur yang telah diselesaikan di dalam direktori media masuk terkelola. Ref media bertingkat, traversal, symlink, hardlink, dan jalur lokal sembarang tetap ditolak.uploadjuga dapat mengatur input file secara langsung melalui--input-refatau--element.
suggestedTargetId dari tabs dalam skrip.
Ringkasan flag snapshot:
--format ai(default dengan Playwright): snapshot AI dengan ref numerik (aria-ref="<n>").--format aria: pohon aksesibilitas dengan refaxN. Saat Playwright tersedia, OpenClaw mengikat ref dengan ID DOM backend ke halaman aktif agar tindakan lanjutan dapat menggunakannya; jika tidak, perlakukan output hanya untuk pemeriksaan.--efficient(atau--mode efficient): preset snapshot peran ringkas. Aturbrowser.snapshotDefaults.mode: "efficient"untuk menjadikannya default (lihat konfigurasi Gateway).--interactive,--compact,--depth,--selectormemaksa snapshot peran dengan refref=e12.--frame "<iframe>"membatasi snapshot peran ke iframe.- Dengan Playwright,
--labelsmenambahkan tangkapan layar dengan label ref yang ditumpangkan (mencetakMEDIA:<path>) serta arrayannotationsdengan kotak pembatas setiap ref. Padascreenshot, label berbasis Playwright berfungsi dengan--full-page,--ref, dan--element; padasnapshot, tangkapan layar yang menyertainya tetap hanya mencakup viewport. Profil sesi yang sudah ada/chrome-mcp merender label yang ditumpangkan pada tangkapan layar halaman, tetapi tidak mengembalikanannotationsatau menggunakan helper proyeksi halaman penuh/ref/elemen Playwright. Tanpa Playwright atau chrome-mcp, tangkapan layar berlabel tidak tersedia. --urlsmenambahkan tujuan tautan yang ditemukan ke snapshot AI.
Snapshot dan ref
OpenClaw mendukung dua gaya “snapshot”:-
Snapshot AI (ref numerik):
openclaw browser snapshot(default;--format ai)- Output: snapshot teks yang menyertakan ref numerik.
- Tindakan:
openclaw browser click 12,openclaw browser type 23 "hello". - Secara internal, ref diselesaikan melalui
aria-refmilik Playwright.
-
Snapshot peran (ref peran seperti
e12):openclaw browser snapshot --interactive(atau--compact,--depth,--selector,--frame)- Output: daftar/pohon berbasis peran dengan
[ref=e12](dan[nth=1]opsional). - Tindakan:
openclaw browser click e12,openclaw browser highlight e12. - Secara internal, ref diselesaikan melalui
getByRole(...)(ditambahnth()untuk duplikat). - Tambahkan
--labelsuntuk menyertakan tangkapan layar dengan labele12yang ditumpangkan. Pada profil berbasis Playwright, ini juga mengembalikan metadata kotak pembatas per ref (annotations[]). - Tambahkan
--urlsketika teks tautan ambigu dan agen memerlukan target navigasi yang konkret.
- Output: daftar/pohon berbasis peran dengan
-
Snapshot ARIA (ref ARIA seperti
ax12):openclaw browser snapshot --format aria- Output: pohon aksesibilitas sebagai node terstruktur.
- Tindakan:
openclaw browser click ax12berfungsi ketika jalur snapshot dapat mengikat ref melalui Playwright dan ID DOM backend Chrome.
-
Jika Playwright tidak tersedia, snapshot ARIA masih dapat berguna untuk
pemeriksaan, tetapi ref mungkin tidak dapat ditindaklanjuti. Ambil ulang snapshot dengan
--format aiatau--interactiveketika Anda memerlukan ref tindakan. -
Bukti Docker untuk jalur fallback CDP mentah:
pnpm test:docker:browser-cdp-snapshotmemulai Chromium dengan CDP, menjalankanbrowser doctor --deep, dan memverifikasi bahwa snapshot peran menyertakan URL tautan, elemen yang dapat diklik karena kursor, dan metadata iframe.
- Ref tidak stabil lintas navigasi; jika sesuatu gagal, jalankan kembali
snapshotdan gunakan ref baru. /actmengembalikantargetIdmentah saat ini setelah penggantian yang dipicu tindakan jika tab penggantinya dapat dibuktikan. Tetap gunakan ID/label tab yang stabil untuk perintah lanjutan.- Jika snapshot peran diambil dengan
--frame, ref peran dibatasi ke iframe tersebut hingga snapshot peran berikutnya. - Ref
axNyang tidak dikenal atau kedaluwarsa akan langsung gagal alih-alih diteruskan ke selektoraria-refPlaywright. Ambil snapshot baru pada tab yang sama ketika hal itu terjadi.
Peningkatan kemampuan tunggu
Anda dapat menunggu lebih dari sekadar waktu/teks:- Tunggu URL (glob didukung oleh Playwright):
openclaw browser wait --url "**/dash"
- Tunggu status pemuatan:
openclaw browser wait --load networkidle- Didukung pada
openclawterkelola dan profil CDP mentah/jarak jauh. Profil yang menggunakan driverexisting-session(termasuk profil defaultuser) menolaknetworkidle; gunakan penantian--url,--text, selektor, atau--fndi sana.
- Tunggu predikat JS:
openclaw browser wait --fn "window.ready===true"
- Tunggu hingga selektor terlihat:
openclaw browser wait "#main"
Alur kerja debug
Ketika suatu tindakan gagal (misalnya, “tidak terlihat”, “pelanggaran mode ketat”, “tertutup”):openclaw browser snapshot --interactive- Gunakan
click <ref>/type <ref>(utamakan ref peran dalam mode interaktif) - Jika masih gagal:
openclaw browser highlight <ref>untuk melihat target Playwright - Jika halaman berperilaku aneh:
openclaw browser errors --clearopenclaw browser requests --filter api --clear
- Untuk debug mendalam, rekam trace:
openclaw browser trace start- reproduksi masalah
openclaw browser trace stop(mencetakTRACE:<path>)
Output JSON
--json ditujukan untuk pembuatan skrip dan alat terstruktur.
Contoh:
refs beserta blok kecil stats (baris/karakter/ref/interaktif) agar alat dapat mempertimbangkan ukuran dan kepadatan payload.
Pengaturan status dan lingkungan
Ini berguna untuk alur kerja “buat situs berperilaku seperti X”:- Cookie:
cookies,cookies set,cookies clear - Penyimpanan:
storage local|session get|set|clear - Luring:
set offline on|off - Header:
set headers --headers-json '{"X-Debug":"1"}'(atau bentuk posisionalset headers '{"X-Debug":"1"}') - Autentikasi dasar HTTP:
set credentials user pass(atau--clear) - Geolokasi:
set geo <lat> <lon> --origin "https://example.com"(atau--clear) - Media:
set media dark|light|no-preference|none - Zona waktu / lokal:
set timezone ...,set locale ... - Perangkat / viewport:
set device "iPhone 14"(preset perangkat Playwright)set viewport 1280 720
Keamanan dan privasi
- Profil browser openclaw mungkin berisi sesi yang telah masuk; perlakukan sebagai data sensitif.
browser act kind=evaluate/openclaw browser evaluatedanwait --fnmengeksekusi JavaScript arbitrer dalam konteks halaman. Injeksi prompt dapat mengarahkannya. Nonaktifkan denganbrowser.evaluateEnabled=falsejika tidak diperlukan.openclaw browser evaluate --fnmenerima sumber fungsi, ekspresi, atau isi pernyataan. Isi pernyataan dibungkus sebagai fungsi asinkron, jadi gunakanreturnuntuk nilai yang ingin dikembalikan. Gunakan--timeout-ms <ms>ketika fungsi di sisi halaman mungkin memerlukan waktu lebih lama daripada batas waktu evaluasi default.- Untuk catatan login dan anti-bot (X/Twitter, dan sebagainya), lihat Login browser + memposting ke X/Twitter.
- Jaga host Gateway/node tetap privat (hanya loopback atau tailnet).
- Endpoint CDP jarak jauh sangat kuat; gunakan tunnel dan lindungi endpoint tersebut.
Terkait
- Browser - ikhtisar, konfigurasi, profil, keamanan
- Login browser - masuk ke situs
- Pemecahan masalah Browser di Linux
- Pemecahan masalah Browser WSL2