openclaw browser
e i pattern di scripting (snapshot, ref, wait, flussi di debug).
API di controllo (facoltativa)
Per integrazioni solo locali, il Gateway espone una piccola API HTTP loopback:- Stato/avvio/arresto:
GET /,POST /start,POST /stop - Schede:
GET /tabs,POST /tabs/open,POST /tabs/focus,DELETE /tabs/:targetId - Snapshot/screenshot:
GET /snapshot,POST /screenshot - Azioni:
POST /navigate,POST /act - Hook:
POST /hooks/file-chooser,POST /hooks/dialog - Download:
POST /download,POST /wait/download - Debug:
GET /console,POST /pdf - Debug:
GET /errors,GET /requests,POST /trace/start,POST /trace/stop,POST /highlight - Rete:
POST /response/body - Stato:
GET /cookies,POST /cookies/set,POST /cookies/clear - Stato:
GET /storage/:kind,POST /storage/:kind/set,POST /storage/:kind/clear - Impostazioni:
POST /set/offline,POST /set/headers,POST /set/credentials,POST /set/geolocation,POST /set/media,POST /set/timezone,POST /set/locale,POST /set/device
?profile=<name>.
Se è configurata l’autenticazione del gateway con segreto condiviso, anche le route HTTP del browser richiedono autenticazione:
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>oppure autenticazione HTTP Basic con quella password
- Questa API browser loopback standalone non usa gli header di identità di trusted-proxy o Tailscale Serve.
- Se
gateway.auth.modeènoneotrusted-proxy, queste route browser loopback non ereditano quelle modalità basate su identità; mantienile solo loopback.
Contratto di errore di /act
POST /act usa una risposta di errore strutturata per errori di convalida e
policy a livello di route:
code attuali:
ACT_KIND_REQUIRED(HTTP 400):kindmanca o non è riconosciuto.ACT_INVALID_REQUEST(HTTP 400): il payload dell’azione non ha superato normalizzazione o convalida.ACT_SELECTOR_UNSUPPORTED(HTTP 400):selectorè stato usato con un tipo di azione non supportato.ACT_EVALUATE_DISABLED(HTTP 403):evaluate(owait --fn) è disabilitato dalla configurazione.ACT_TARGET_ID_MISMATCH(HTTP 403):targetIddi primo livello o batch è in conflitto con il target della richiesta.ACT_EXISTING_SESSION_UNSUPPORTED(HTTP 501): l’azione non è supportata per profili existing-session.
{ "error": "<message>" } senza
un campo code.
Requisito Playwright
Alcune funzionalità (navigate/act/AI snapshot/role snapshot, screenshot di elementi, PDF) richiedono Playwright. Se Playwright non è installato, quegli endpoint restituiscono un chiaro errore 501. Cosa funziona ancora senza Playwright:- Snapshot ARIA
- Screenshot della pagina per il browser
openclawgestito quando è disponibile un WebSocket CDP per scheda - Screenshot della pagina per profili
existing-session/ Chrome MCP - Screenshot basati su ref in
existing-session(--ref) dall’output dello snapshot
navigateact- AI snapshot / role snapshot
- Screenshot di elementi con selettore CSS (
--element) - Esportazione PDF completa del browser
--full-page; la route restituisce fullPage is not supported for element screenshots.
Se vedi Playwright is not available in this gateway build, ripara le dipendenze runtime del plugin browser bundle in modo che playwright-core sia installato,
poi riavvia il gateway. Per installazioni pacchettizzate, esegui openclaw doctor --fix.
Per Docker, installa anche i binari del browser Chromium come mostrato sotto.
Installazione Docker di Playwright
Se il tuo Gateway gira in Docker, evitanpx playwright (conflitti con override npm).
Usa invece la CLI bundle:
PLAYWRIGHT_BROWSERS_PATH (ad esempio,
/home/node/.cache/ms-playwright) e assicurati che /home/node sia persistente tramite
OPENCLAW_HOME_VOLUME o un bind mount. Vedi Docker.
Come funziona (internamente)
Un piccolo server di controllo loopback accetta richieste HTTP e si connette ai browser basati su Chromium tramite CDP. Le azioni avanzate (click/type/snapshot/PDF) passano attraverso Playwright sopra CDP; quando Playwright manca, sono disponibili solo le operazioni non-Playwright. L’agente vede un’unica interfaccia stabile mentre browser e profili locali/remoti possono cambiare liberamente sotto il cofano.Riferimento rapido CLI
Tutti i comandi accettano--browser-profile <name> per puntare a un profilo specifico, e --json per output leggibile dalla macchina.
Base: stato, schede, open/focus/close
Base: stato, schede, open/focus/close
Ispezione: screenshot, snapshot, console, errori, richieste
Ispezione: screenshot, snapshot, console, errori, richieste
Azioni: navigate, click, type, drag, wait, evaluate
Azioni: navigate, click, type, drag, wait, evaluate
Stato: cookie, storage, offline, header, geo, device
Stato: cookie, storage, offline, header, geo, device
uploadedialogsono chiamate di arming; eseguile prima del click/press che attiva il chooser/dialog.click/type/ecc. richiedono unrefdasnapshot(12numerico oppure role refe12). I selettori CSS sono intenzionalmente non supportati per le azioni.- I percorsi di download, trace e upload sono vincolati alle root temporanee di OpenClaw:
/tmp/openclaw{,/downloads,/uploads}(fallback:${os.tmpdir()}/openclaw/...). uploadpuò anche impostare direttamente gli input file tramite--input-refo--element.
--format ai(predefinito con Playwright): AI snapshot con ref numerici (aria-ref="<n>").--format aria: albero di accessibilità, senza ref; solo ispezione.--efficient(o--mode efficient): preset compatto per role snapshot. Impostabrowser.snapshotDefaults.mode: "efficient"per renderlo il predefinito (vedi Configurazione del Gateway).--interactive,--compact,--depth,--selectorforzano un role snapshot con refref=e12.--frame "<iframe>"limita i role snapshot a un iframe.--labelsaggiunge uno screenshot solo viewport con etichette ref sovrapposte (stampaMEDIA:<path>).
Snapshot e ref
OpenClaw supporta due stili di “snapshot”:-
AI snapshot (ref numerici):
openclaw browser snapshot(predefinito;--format ai)- Output: uno snapshot testuale che include ref numerici.
- Azioni:
openclaw browser click 12,openclaw browser type 23 "hello". - Internamente, il ref viene risolto tramite
aria-refdi Playwright.
-
Role snapshot (role ref come
e12):openclaw browser snapshot --interactive(oppure--compact,--depth,--selector,--frame)- Output: un elenco/albero basato sui ruoli con
[ref=e12](e facoltativamente[nth=1]). - Azioni:
openclaw browser click e12,openclaw browser highlight e12. - Internamente, il ref viene risolto tramite
getByRole(...)(piùnth()per i duplicati). - Aggiungi
--labelsper includere uno screenshot viewport con etichettee12sovrapposte.
- Output: un elenco/albero basato sui ruoli con
- I ref non sono stabili tra navigazioni; se qualcosa fallisce, riesegui
snapshote usa un ref aggiornato. - Se il role snapshot è stato acquisito con
--frame, i role ref sono limitati a quell’iframe fino al successivo role snapshot.
Potenziamenti di wait
Puoi attendere più cose oltre al semplice tempo/testo:- Attendere un URL (glob supportati da Playwright):
openclaw browser wait --url "**/dash"
- Attendere uno stato di caricamento:
openclaw browser wait --load networkidle
- Attendere un predicato JS:
openclaw browser wait --fn "window.ready===true"
- Attendere che un selettore diventi visibile:
openclaw browser wait "#main"
Flussi di debug
Quando un’azione fallisce (ad esempio “not visible”, “strict mode violation”, “covered”):openclaw browser snapshot --interactive- Usa
click <ref>/type <ref>(preferisci role ref in modalità interattiva) - Se fallisce ancora:
openclaw browser highlight <ref>per vedere cosa sta targettando Playwright - Se la pagina si comporta in modo strano:
openclaw browser errors --clearopenclaw browser requests --filter api --clear
- Per un debug approfondito: registra una trace:
openclaw browser trace start- riproduci il problema
openclaw browser trace stop(stampaTRACE:<path>)
Output JSON
--json serve per scripting e tooling strutturato.
Esempi:
refs più un piccolo blocco stats (righe/caratteri/ref/interattivo) così gli strumenti possono ragionare sulla dimensione e la densità del payload.
Manopole di stato e ambiente
Queste sono utili per flussi di lavoro del tipo “fai comportare il sito come X”:- Cookie:
cookies,cookies set,cookies clear - Storage:
storage local|session get|set|clear - Offline:
set offline on|off - Header:
set headers --headers-json '{"X-Debug":"1"}'(il legacyset headers --json '{"X-Debug":"1"}'continua a essere supportato) - Auth HTTP basic:
set credentials user pass(oppure--clear) - Geolocalizzazione:
set geo <lat> <lon> --origin "https://example.com"(oppure--clear) - Media:
set media dark|light|no-preference|none - Fuso orario / locale:
set timezone ...,set locale ... - Device / viewport:
set device "iPhone 14"(preset Playwright per dispositivi)set viewport 1280 720
Sicurezza e privacy
- Il profilo browser openclaw può contenere sessioni con login attivo; trattalo come sensibile.
browser act kind=evaluate/openclaw browser evaluateewait --fneseguono JavaScript arbitrario nel contesto della pagina. Il prompt injection può orientare questo comportamento. Disabilitalo conbrowser.evaluateEnabled=falsese non ti serve.- Per login e note anti-bot (X/Twitter, ecc.), vedi Login del browser + pubblicazione su X/Twitter.
- Mantieni privato il Gateway/node host (solo loopback o solo tailnet).
- Gli endpoint CDP remoti sono potenti; usa tunnel e proteggili.
Correlati
- Browser — panoramica, configurazione, profili, sicurezza
- Login del browser — accesso ai siti
- Risoluzione dei problemi del browser su Linux
- Risoluzione dei problemi del browser su WSL2