openclaw browser
e de padrões de script (snapshots, refs, waits, fluxos de depuração).
API de controle (opcional)
Apenas para integrações locais, o Gateway expõe uma pequena API HTTP em loopback:- Status/start/stop:
GET /,POST /start,POST /stop - Abas:
GET /tabs,POST /tabs/open,POST /tabs/focus,DELETE /tabs/:targetId - Snapshot/screenshot:
GET /snapshot,POST /screenshot - Ações:
POST /navigate,POST /act - Hooks:
POST /hooks/file-chooser,POST /hooks/dialog - Downloads:
POST /download,POST /wait/download - Depuração:
GET /console,POST /pdf - Depuração:
GET /errors,GET /requests,POST /trace/start,POST /trace/stop,POST /highlight - Rede:
POST /response/body - Estado:
GET /cookies,POST /cookies/set,POST /cookies/clear - Estado:
GET /storage/:kind,POST /storage/:kind/set,POST /storage/:kind/clear - Configurações:
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 a autenticação do gateway por segredo compartilhado estiver configurada, rotas HTTP do browser também exigirão autenticação:
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>ou autenticação HTTP Basic com essa senha
- Esta API de browser loopback independente não consome cabeçalhos de identidade de
trusted-proxynem de Tailscale Serve. - Se
gateway.auth.modefornoneoutrusted-proxy, essas rotas de browser em loopback não herdam esses modos com identidade; mantenha-as apenas em loopback.
Contrato de erro de /act
POST /act usa uma resposta de erro estruturada para validação no nível da rota e
falhas de política:
code:
ACT_KIND_REQUIRED(HTTP 400):kindestá ausente ou não foi reconhecido.ACT_INVALID_REQUEST(HTTP 400): o payload da ação falhou na normalização ou validação.ACT_SELECTOR_UNSUPPORTED(HTTP 400):selectorfoi usado com um tipo de ação não compatível.ACT_EVALUATE_DISABLED(HTTP 403):evaluate(ouwait --fn) está desabilitado por configuração.ACT_TARGET_ID_MISMATCH(HTTP 403):targetIdde nível superior ou em lote entra em conflito com o alvo da requisição.ACT_EXISTING_SESSION_UNSUPPORTED(HTTP 501): a ação não é compatível com perfis de sessão existente.
{ "error": "<message>" } sem um
campo code.
Requisito do Playwright
Alguns recursos (navigate/act/AI snapshot/role snapshot, screenshots de elemento,
PDF) exigem Playwright. Se o Playwright não estiver instalado, esses endpoints retornam
um erro 501 claro.
O que ainda funciona sem Playwright:
- Snapshots ARIA
- Screenshots de página para o browser gerenciado
openclawquando um WebSocket CDP por aba estiver disponível - Screenshots de página para perfis
existing-session/ Chrome MCP - Screenshots baseados em ref de
existing-session(--ref) a partir da saída do snapshot
navigateact- AI snapshots / role snapshots
- Screenshots de elemento com seletor CSS (
--element) - Exportação PDF completa do browser
--full-page; a rota retorna fullPage is not supported for element screenshots.
Se você vir Playwright is not available in this gateway build, repare as dependências de runtime do plugin de browser integrado para que playwright-core seja instalado,
depois reinicie o gateway. Para instalações empacotadas, execute openclaw doctor --fix.
Para Docker, instale também os binários do browser Chromium, como mostrado abaixo.
Instalação do Playwright em Docker
Se seu Gateway roda em Docker, evitenpx playwright (conflitos de override do npm).
Use a CLI integrada em vez disso:
PLAYWRIGHT_BROWSERS_PATH (por exemplo,
/home/node/.cache/ms-playwright) e garanta que /home/node seja persistido via
OPENCLAW_HOME_VOLUME ou um bind mount. Consulte Docker.
Como funciona (internamente)
Um pequeno servidor de controle em loopback aceita requisições HTTP e se conecta a browsers baseados em Chromium via CDP. Ações avançadas (click/type/snapshot/PDF) passam pelo Playwright sobre o CDP; quando o Playwright não está disponível, apenas operações sem Playwright ficam disponíveis. O agente vê uma interface estável enquanto browsers e perfis locais/remotos são trocados livremente por baixo.Referência rápida da CLI
Todos os comandos aceitam--browser-profile <name> para mirar em um perfil específico, e --json para saída legível por máquina.
Básico: status, abas, abrir/focar/fechar
Básico: status, abas, abrir/focar/fechar
Inspeção: screenshot, snapshot, console, errors, requests
Inspeção: screenshot, snapshot, console, errors, requests
Ações: navigate, click, type, drag, wait, evaluate
Ações: navigate, click, type, drag, wait, evaluate
Estado: cookies, storage, offline, headers, geo, device
Estado: cookies, storage, offline, headers, geo, device
uploadedialogsão chamadas de arming; execute-as antes do click/press que dispara o seletor/dialog.click/type/etc exigem umarefdesnapshot(numérica12ou ref de rolee12). Seletores CSS intencionalmente não são compatíveis com ações.- Caminhos de download, trace e upload são limitados às raízes temporárias do OpenClaw:
/tmp/openclaw{,/downloads,/uploads}(fallback:${os.tmpdir()}/openclaw/...). uploadtambém pode definir diretamente entradas de arquivo via--input-refou--element.
--format ai(padrão com Playwright): AI snapshot com refs numéricas (aria-ref="<n>").--format aria: árvore de acessibilidade, sem refs; apenas inspeção.--efficient(ou--mode efficient): preset de role snapshot compacto. Definabrowser.snapshotDefaults.mode: "efficient"para torná-lo o padrão (consulte Configuração do Gateway).--interactive,--compact,--depth,--selectorforçam um role snapshot com refsref=e12.--frame "<iframe>"limita role snapshots a um iframe.--labelsadiciona uma screenshot apenas da viewport com labels de ref sobrepostas (imprimeMEDIA:<path>).
Snapshots e refs
O OpenClaw oferece suporte a dois estilos de “snapshot”:-
AI snapshot (refs numéricas):
openclaw browser snapshot(padrão;--format ai)- Saída: um snapshot de texto que inclui refs numéricas.
- Ações:
openclaw browser click 12,openclaw browser type 23 "hello". - Internamente, a ref é resolvida via
aria-refdo Playwright.
-
Role snapshot (refs de role como
e12):openclaw browser snapshot --interactive(ou--compact,--depth,--selector,--frame)- Saída: uma lista/árvore baseada em roles com
[ref=e12](e opcionalmente[nth=1]). - Ações:
openclaw browser click e12,openclaw browser highlight e12. - Internamente, a ref é resolvida via
getByRole(...)(maisnth()para duplicatas). - Adicione
--labelspara incluir uma screenshot da viewport com labelse12sobrepostas.
- Saída: uma lista/árvore baseada em roles com
- Refs não são estáveis entre navegações; se algo falhar, execute
snapshotnovamente e use uma ref nova. - Se o role snapshot foi obtido com
--frame, refs de role ficam limitadas a esse iframe até o próximo role snapshot.
Power-ups de wait
Você pode esperar por mais coisas além de tempo/texto:- Esperar por URL (globs compatíveis pelo Playwright):
openclaw browser wait --url "**/dash"
- Esperar por estado de carregamento:
openclaw browser wait --load networkidle
- Esperar por um predicado JS:
openclaw browser wait --fn "window.ready===true"
- Esperar que um seletor fique visível:
openclaw browser wait "#main"
Fluxos de depuração
Quando uma ação falhar (por exemplo, “not visible”, “strict mode violation”, “covered”):openclaw browser snapshot --interactive- Use
click <ref>/type <ref>(prefira refs de role no modo interativo) - Se ainda falhar:
openclaw browser highlight <ref>para ver o que o Playwright está mirando - Se a página se comportar de forma estranha:
openclaw browser errors --clearopenclaw browser requests --filter api --clear
- Para depuração profunda: grave um trace:
openclaw browser trace start- reproduza o problema
openclaw browser trace stop(imprimeTRACE:<path>)
Saída JSON
--json é para scripts e tooling estruturado.
Exemplos:
refs mais um pequeno bloco stats (lines/chars/refs/interactive), para que tools possam raciocinar sobre tamanho e densidade do payload.
Controles de estado e ambiente
Estes são úteis para workflows de “fazer o site se comportar como X”:- Cookies:
cookies,cookies set,cookies clear - Storage:
storage local|session get|set|clear - Offline:
set offline on|off - Headers:
set headers --headers-json '{"X-Debug":"1"}'(o legadoset headers --json '{"X-Debug":"1"}'continua compatível) - Autenticação HTTP Basic:
set credentials user pass(ou--clear) - Geolocalização:
set geo <lat> <lon> --origin "https://example.com"(ou--clear) - Mídia:
set media dark|light|no-preference|none - Timezone / localidade:
set timezone ...,set locale ... - Device / viewport:
set device "iPhone 14"(presets de device do Playwright)set viewport 1280 720
Segurança e privacidade
- O perfil de browser
openclawpode conter sessões autenticadas; trate-o como sensível. browser act kind=evaluate/openclaw browser evaluateewait --fnexecutam JavaScript arbitrário no contexto da página. Prompt injection pode direcionar isso. Desabilite combrowser.evaluateEnabled=falsese não precisar.- Para logins e observações anti-bot (X/Twitter etc.), consulte Login de browser + postagem em X/Twitter.
- Mantenha o host do Gateway/node privado (apenas loopback ou tailnet).
- Endpoints CDP remotos são poderosos; faça tunnel e proteja-os.
Relacionado
- Browser — visão geral, configuração, perfis, segurança
- Login de browser — autenticação em sites
- Solução de problemas do Browser no Linux
- Solução de problemas do Browser no WSL2