Browser (gerenciado pelo openclaw)
O OpenClaw pode executar um perfil dedicado do Chrome/Brave/Edge/Chromium que o agente controla. Ele é isolado do seu navegador pessoal e é gerenciado por meio de um pequeno serviço de controle local dentro do Gateway (apenas loopback). Visão para iniciantes:- Pense nisso como um navegador separado, apenas para o agente.
- O perfil
openclawnão toca no perfil do seu navegador pessoal. - O agente pode abrir abas, ler páginas, clicar e digitar em um ambiente seguro.
- O perfil padrão
chromeusa o navegador Chromium padrão do sistema via o relay de extensão; mude paraopenclawpara o navegador gerenciado e isolado.
O que você recebe
- Um perfil de navegador separado chamado openclaw (acento laranja por padrão).
- Controle determinístico de abas (listar/abrir/focar/fechar).
- Ações do agente (clicar/digitar/arrastar/selecionar), snapshots, capturas de tela, PDFs.
- Suporte opcional a múltiplos perfis (
openclaw,work,remote, …).
Início rápido
Perfis: openclaw vs chrome
openclaw: navegador gerenciado e isolado (não requer extensão).chrome: relay de extensão para o navegador do sistema (requer que a extensão do OpenClaw esteja anexada a uma aba).
browser.defaultProfile: "openclaw" se você quiser o modo gerenciado como padrão.
Configuração
As configurações do navegador ficam em~/.openclaw/openclaw.json.
- O serviço de controle do navegador se vincula ao loopback em uma porta derivada de
gateway.port(padrão:18791, que é gateway + 2). O relay usa a próxima porta (18792). - Se você sobrescrever a porta do Gateway (
gateway.portouOPENCLAW_GATEWAY_PORT), as portas derivadas do navegador se ajustam para permanecer na mesma “família”. cdpUrlusa por padrão a porta do relay quando não está definido.remoteCdpTimeoutMsse aplica a verificações de alcançabilidade de CDP remoto (não-loopback).remoteCdpHandshakeTimeoutMsse aplica a verificações de alcançabilidade de WebSocket CDP remoto.attachOnly: truesignifica “nunca iniciar um navegador local; apenas anexar se já estiver em execução”.color+colorpor perfil aplicam um tom à UI do navegador para que você veja qual perfil está ativo.- O perfil padrão é
chrome(relay de extensão). UsedefaultProfile: "openclaw"para o navegador gerenciado. - Ordem de detecção automática: navegador padrão do sistema se for baseado em Chromium; caso contrário Chrome → Brave → Edge → Chromium → Chrome Canary.
- Perfis locais
openclawatribuem automaticamentecdpPort/cdpUrl— defina-os apenas para CDP remoto.
Usar Brave (ou outro navegador baseado em Chromium)
Se o navegador padrão do sistema for baseado em Chromium (Chrome/Brave/Edge/etc), o OpenClaw o usa automaticamente. Definabrowser.executablePath para sobrescrever a
detecção automática:
Exemplo de CLI:
Controle local vs remoto
- Controle local (padrão): o Gateway inicia o serviço de controle em loopback e pode iniciar um navegador local.
- Controle remoto (host de nó): execute um host de nó na máquina que tem o navegador; o Gateway faz proxy das ações do navegador para ele.
- CDP remoto: defina
browser.profiles.<name>.cdpUrl(oubrowser.cdpUrl) para anexar a um navegador baseado em Chromium remoto. Nesse caso, o OpenClaw não iniciará um navegador local.
- Tokens em query (ex.:
https://provider.example?token=<token>) - Autenticação HTTP Basic (ex.:
https://user:[email protected])
/json/* e ao conectar
ao WebSocket CDP. Prefira variáveis de ambiente ou gerenciadores de segredos para
tokens em vez de confirmá-los em arquivos de configuração.
Proxy de navegador do nó (padrão zero-config)
Se você executar um host de nó na máquina que tem o navegador, o OpenClaw pode rotear automaticamente chamadas de ferramentas de navegador para esse nó sem qualquer configuração extra do navegador. Este é o caminho padrão para gateways remotos. Notas:- O host de nó expõe seu servidor local de controle do navegador por meio de um comando de proxy.
- Os perfis vêm da própria configuração
browser.profilesdo nó (igual ao local). - Desative se você não quiser:
- No nó:
nodeHost.browserProxy.enabled=false - No gateway:
gateway.nodes.browser.mode="off"
- No nó:
Browserless (CDP remoto hospedado)
O Browserless é um serviço Chromium hospedado que expõe endpoints CDP via HTTPS. Você pode apontar um perfil de navegador do OpenClaw para um endpoint regional do Browserless e autenticar com sua chave de API. Exemplo:- Substitua
<BROWSERLESS_API_KEY>pelo seu token real do Browserless. - Escolha o endpoint de região que corresponda à sua conta do Browserless (veja a documentação deles).
Segurança
Ideias-chave:- O controle do navegador é apenas em loopback; o acesso flui pela autenticação do Gateway ou pelo pareamento de nós.
- Se o controle do navegador estiver habilitado e nenhuma autenticação estiver configurada, o OpenClaw gera automaticamente
gateway.auth.tokenna inicialização e o persiste na configuração. - Mantenha o Gateway e quaisquer hosts de nó em uma rede privada (Tailscale); evite exposição pública.
- Trate URLs/tokens de CDP remoto como segredos; prefira variáveis de ambiente ou um gerenciador de segredos.
- Prefira endpoints HTTPS e tokens de curta duração quando possível.
- Evite embutir tokens de longa duração diretamente em arquivos de configuração.
Perfis (multi-navegador)
O OpenClaw suporta vários perfis nomeados (configurações de roteamento). Os perfis podem ser:- openclaw-managed: uma instância dedicada de navegador baseado em Chromium com seu próprio diretório de dados do usuário + porta CDP
- remote: uma URL CDP explícita (navegador baseado em Chromium executando em outro lugar)
- extension relay: suas abas existentes do Chrome via o relay local + extensão do Chrome
- O perfil
openclawé criado automaticamente se estiver ausente. - O perfil
chromeé integrado para o relay da extensão do Chrome (aponta parahttp://127.0.0.1:18792por padrão). - As portas CDP locais alocam de 18800–18899 por padrão.
- Excluir um perfil move seu diretório de dados local para a Lixeira.
?profile=<name>; a CLI usa --browser-profile.
Relay da extensão do Chrome (use seu Chrome existente)
O OpenClaw também pode dirigir suas abas existentes do Chrome (sem uma instância separada do Chrome “openclaw”) via um relay CDP local + uma extensão do Chrome. Guia completo: Extensão do Chrome Fluxo:- O Gateway roda localmente (mesma máquina) ou um host de nó roda na máquina do navegador.
- Um servidor de relay local escuta em um
cdpUrlde loopback (padrão:http://127.0.0.1:18792). - Você clica no ícone da extensão OpenClaw Browser Relay em uma aba para anexar (ele não anexa automaticamente).
- O agente controla essa aba por meio da ferramenta normal
browser, selecionando o perfil correto.
Sessões em sandbox
Se a sessão do agente estiver em sandbox, a ferramentabrowser pode usar por padrão target="sandbox" (navegador em sandbox).
A tomada de controle via relay da extensão do Chrome requer controle do navegador do host, então:
- execute a sessão fora do sandbox, ou
- defina
agents.defaults.sandbox.browser.allowHostControl: truee usetarget="host"ao chamar a ferramenta.
Configuração
- Carregue a extensão (dev/desempacotada):
- Chrome →
chrome://extensions→ habilite “Developer mode” - “Load unpacked” → selecione o diretório impresso por
openclaw browser extension path - Fixe a extensão e, em seguida, clique nela na aba que você quer controlar (o badge mostra
ON).
- Use:
- CLI:
openclaw browser --browser-profile chrome tabs - Ferramenta do agente:
browsercomprofile="chrome"
- Este modo depende do Playwright-on-CDP para a maioria das operações (capturas de tela/snapshots/ações).
- Desanexe clicando novamente no ícone da extensão.
Garantias de isolamento
- Diretório de dados do usuário dedicado: nunca toca no perfil do seu navegador pessoal.
- Portas dedicadas: evita
9222para prevenir colisões com fluxos de trabalho de desenvolvimento. - Controle determinístico de abas: direciona abas por
targetId, não pela “última aba”.
Seleção de navegador
Ao iniciar localmente, o OpenClaw escolhe o primeiro disponível:- Chrome
- Brave
- Edge
- Chromium
- Chrome Canary
browser.executablePath.
Plataformas:
- macOS: verifica
/Applicationse~/Applications. - Linux: procura
google-chrome,brave,microsoft-edge,chromium, etc. - Windows: verifica locais comuns de instalação.
API de controle (opcional)
Apenas para integrações locais, o Gateway expõe uma pequena API HTTP em loopback:- Status/iniciar/parar:
GET /,POST /start,POST /stop - Abas:
GET /tabs,POST /tabs/open,POST /tabs/focus,DELETE /tabs/:targetId - Snapshot/captura de tela:
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 estiver configurada, as rotas HTTP do navegador também exigirão autenticação:
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>ou HTTP Basic auth com essa senha
Requisito do Playwright
Alguns recursos (navegar/agir/snapshot de IA/snapshot por função, capturas de elementos, PDF) exigem Playwright. Se o Playwright não estiver instalado, esses endpoints retornam um erro 501 claro. Snapshots ARIA e capturas de tela básicas ainda funcionam para o Chrome gerenciado pelo openclaw. Para o driver de relay da extensão do Chrome, snapshots ARIA e capturas de tela exigem Playwright. Se você virPlaywright is not available in this gateway build, instale o pacote completo do
Playwright (não playwright-core) e reinicie o gateway, ou reinstale o
OpenClaw com suporte a navegador.
Instalação do Playwright no Docker
Se o seu Gateway roda em Docker, evitenpx playwright (conflitos de override do npm).
Use a CLI empacotada:
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. Veja Docker.
Como funciona (interno)
Fluxo de alto nível:- Um pequeno servidor de controle aceita requisições HTTP.
- Ele se conecta a navegadores baseados em Chromium (Chrome/Brave/Edge/Chromium) via CDP.
- Para ações avançadas (clicar/digitar/snapshot/PDF), usa Playwright sobre o CDP.
- Quando o Playwright está ausente, apenas operações que não dependem do Playwright ficam disponíveis.
Referência rápida da CLI
Todos os comandos aceitam--browser-profile <name> para direcionar um perfil específico.
Todos os comandos também aceitam --json para saída legível por máquina (payloads estáveis).
Básicos:
openclaw browser statusopenclaw browser startopenclaw browser stopopenclaw browser tabsopenclaw browser tabopenclaw browser tab newopenclaw browser tab select 2openclaw browser tab close 2openclaw browser open https://example.comopenclaw browser focus abcd1234openclaw browser close abcd1234
openclaw browser screenshotopenclaw browser screenshot --full-pageopenclaw browser screenshot --ref 12openclaw browser screenshot --ref e12openclaw browser snapshotopenclaw browser snapshot --format aria --limit 200openclaw browser snapshot --interactive --compact --depth 6openclaw browser snapshot --efficientopenclaw browser snapshot --labelsopenclaw browser snapshot --selector "#main" --interactiveopenclaw browser snapshot --frame "iframe#main" --interactiveopenclaw browser console --level erroropenclaw browser errors --clearopenclaw browser requests --filter api --clearopenclaw browser pdfopenclaw browser responsebody "**/api" --max-chars 5000
openclaw browser navigate https://example.comopenclaw browser resize 1280 720openclaw browser click 12 --doubleopenclaw browser click e12 --doubleopenclaw browser type 23 "hello" --submitopenclaw browser press Enteropenclaw browser hover 44openclaw browser scrollintoview e12openclaw browser drag 10 11openclaw browser select 9 OptionA OptionBopenclaw browser download e12 /tmp/report.pdfopenclaw browser waitfordownload /tmp/report.pdfopenclaw browser upload /tmp/file.pdfopenclaw browser fill --fields '[{"ref":"1","type":"text","value":"Ada"}]'openclaw browser dialog --acceptopenclaw browser wait --text "Done"openclaw browser wait "#main" --url "**/dash" --load networkidle --fn "window.ready===true"openclaw browser evaluate --fn '(el) => el.textContent' --ref 7openclaw browser highlight e12openclaw browser trace startopenclaw browser trace stop
openclaw browser cookiesopenclaw browser cookies set session abc123 --url "https://example.com"openclaw browser cookies clearopenclaw browser storage local getopenclaw browser storage local set theme darkopenclaw browser storage session clearopenclaw browser set offline onopenclaw browser set headers --json '{"X-Debug":"1"}'openclaw browser set credentials user passopenclaw browser set credentials --clearopenclaw browser set geo 37.7749 -122.4194 --origin "https://example.com"openclaw browser set geo --clearopenclaw browser set media darkopenclaw browser set timezone America/New_Yorkopenclaw browser set locale en-USopenclaw browser set device "iPhone 14"
uploadedialogsão chamadas de armar; execute-as antes do clique/pressionamento que dispara o seletor/diálogo.- Os caminhos de download e saída de trace são restritos às raízes temporárias do OpenClaw:
- traces:
/tmp/openclaw(fallback:${os.tmpdir()}/openclaw) - downloads:
/tmp/openclaw/downloads(fallback:${os.tmpdir()}/openclaw/downloads)
- traces:
- Os caminhos de upload são restritos a uma raiz temporária de uploads do OpenClaw:
- uploads:
/tmp/openclaw/uploads(fallback:${os.tmpdir()}/openclaw/uploads)
- uploads:
uploadtambém pode definir inputs de arquivo diretamente via--input-refou--element.snapshot:--format ai(padrão quando o Playwright está instalado): retorna um snapshot de IA com referências numéricas (aria-ref="<n>").--format aria: retorna a árvore de acessibilidade (sem refs; apenas inspeção).--efficient(ou--mode efficient): preset compacto de snapshot por função (interativo + compacto + profundidade + maxChars menor).- Padrão de configuração (apenas ferramenta/CLI): defina
browser.snapshotDefaults.mode: "efficient"para usar snapshots eficientes quando o chamador não passa um modo (veja Configuração do Gateway). - Opções de snapshot por função (
--interactive,--compact,--depth,--selector) forçam um snapshot baseado em função com refs comoref=e12. --frame "<iframe selector>"delimita snapshots por função a um iframe (combina com refs de função comoe12).--interactiveproduz uma lista plana e fácil de selecionar de elementos interativos (melhor para conduzir ações).--labelsadiciona uma captura de tela apenas do viewport com rótulos de ref sobrepostos (imprimeMEDIA:<path>).
click/type/etc exigem umrefdesnapshot(seja numérico12ou ref por funçãoe12). Seletores CSS intencionalmente não são suportados para ações.
Snapshots e refs
O OpenClaw suporta dois estilos de “snapshot”:-
Snapshot de IA (refs numéricas):
openclaw browser snapshot(padrão;--format ai)- Saída: um snapshot em 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.
-
Snapshot por função (refs por função como
e12):openclaw browser snapshot --interactive(ou--compact,--depth,--selector,--frame)- Saída: uma lista/árvore baseada em função com
[ref=e12](e opcional[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 captura de tela do viewport com rótulose12sobrepostos.
- Saída: uma lista/árvore baseada em função com
- As refs não são estáveis entre navegações; se algo falhar, execute novamente
snapshote use uma ref nova. - Se o snapshot por função foi feito com
--frame, as refs por função ficam delimitadas a esse iframe até o próximo snapshot por função.
Power-ups de espera
Você pode esperar por mais do que apenas tempo/texto:- Esperar por URL (globs suportados 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 se torne visível:
openclaw browser wait "#main"
Depurar workflows
Quando uma ação falha (ex.: “not visible”, “strict mode violation”, “covered”):openclaw browser snapshot --interactive- Use
click <ref>/type <ref>(prefira refs por função no modo interativo) - Se ainda falhar:
openclaw browser highlight <ref>para ver o que o Playwright está direcionando - Se a página se comportar de forma estranha:
openclaw browser errors --clearopenclaw browser requests --filter api --clear
- Para depuração profunda: registre um trace:
openclaw browser trace start- reproduza o problema
openclaw browser trace stop(imprimeTRACE:<path>)
Saída JSON
--json é para scripts e ferramentas estruturadas.
Exemplos:
refs mais um pequeno bloco stats (linhas/chars/refs/interativo) para que ferramentas possam raciocinar sobre tamanho e densidade do payload.
Controles de estado e ambiente
Eles são úteis para fluxos “fazer o site se comportar como X”:- Cookies:
cookies,cookies set,cookies clear - Armazenamento:
storage local|session get|set|clear - Offline:
set offline on|off - Cabeçalhos:
set headers --json '{"X-Debug":"1"}'(ou--clear) - 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 - Fuso horário / localidade:
set timezone ...,set locale ... - Dispositivo / viewport:
set device "iPhone 14"(presets de dispositivo do Playwright)set viewport 1280 720
Segurança e privacidade
- O perfil de navegador openclaw pode conter sessões logadas; trate-o como sensível.
browser act kind=evaluate/openclaw browser evaluateewait --fnexecutam JavaScript arbitrário no contexto da página. Injeção de prompt pode direcionar isso. Desative combrowser.evaluateEnabled=falsese você não precisar.- Para logins e notas anti-bot (X/Twitter, etc.), veja Login no navegador + postagem no X/Twitter.
- Mantenha o Gateway/host de nó privado (apenas loopback ou tailnet).
- Endpoints CDP remotos são poderosos; tunnele e proteja-os.
Solução de problemas
Para problemas específicos do Linux (especialmente Chromium snap), veja Solução de problemas do navegador.Ferramentas do agente + como o controle funciona
O agente recebe uma ferramenta para automação de navegador:browser— status/iniciar/parar/abas/abrir/focar/fechar/snapshot/captura de tela/navegar/agir
browser snapshotretorna uma árvore de UI estável (IA ou ARIA).browser actusa os IDsrefdo snapshot para clicar/digitar/arrastar/selecionar.browser screenshotcaptura pixels (página inteira ou elemento).browseraceita:profilepara escolher um perfil de navegador nomeado (openclaw, chrome ou CDP remoto).target(sandbox|host|node) para selecionar onde o navegador reside.- Em sessões em sandbox,
target: "host"exigeagents.defaults.sandbox.browser.allowHostControl=true. - Se
targetfor omitido: sessões em sandbox usam por padrãosandbox, sessões fora de sandbox usam por padrãohost. - Se um nó com capacidade de navegador estiver conectado, a ferramenta pode rotear automaticamente para ele, a menos que você fixe
target="host"outarget="node".