openclaw browser
y los patrones de scripting (snapshots, refs, esperas, flujos de depuración).
API de control (opcional)
Solo para integraciones locales, el Gateway expone una pequeña API HTTP de loopback. Este servidor independiente es opcional: establece la variable de entornoOPENCLAW_EAGER_BROWSER_CONTROL_SERVER=1 en el entorno del servicio gateway
y reinicia el gateway antes de que los endpoints HTTP estén disponibles. Sin
esta variable, el runtime de control del navegador sigue funcionando mediante la CLI y
las herramientas del agente, pero nada escucha en el puerto de control de loopback.
- Estado/iniciar/detener:
GET /,GET /doctor,POST /start,POST /stop,POST /reset-profile - Perfiles:
GET /profiles,POST /profiles/create,DELETE /profiles/:name - Pestañas:
GET /tabs,POST /tabs/open,POST /tabs/focus,DELETE /tabs/:targetId,POST /tabs/action - Snapshot/captura de pantalla:
GET /snapshot,POST /screenshot - Acciones:
POST /navigate,POST /act - Hooks:
POST /hooks/file-chooser,POST /hooks/dialog - Descargas:
POST /download,POST /wait/download - Permisos:
POST /permissions/grant - Depuración:
GET /console,POST /pdf - Depuración:
GET /errors,GET /requests,GET /dialogs,POST /trace/start,POST /trace/stop,POST /highlight - Red:
POST /response/body - Estado:
GET /cookies,POST /cookies/set,POST /cookies/clear - Estado:
GET /storage/:kind,POST /storage/:kind/set,POST /storage/:kind/clear - Ajustes:
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 es la forma por lotes que la CLI usa internamente para los
subcomandos de browser tab ({"action":"new"|"label"|"select"|"close"|"list", ...});
prefiere las rutas de pestaña de propósito único anteriores al crear scripts directamente.
Todos los endpoints aceptan ?profile=<name>. POST /start?headless=true solicita un
lanzamiento headless de un solo uso para perfiles gestionados locales sin cambiar la
configuración persistente del navegador; los perfiles de solo conexión, CDP remoto y
sesión existente rechazan esa anulación porque OpenClaw no lanza esos procesos de navegador.
Para endpoints de pestañas, targetId es el nombre del campo de compatibilidad. Prefiere pasar
suggestedTargetId desde GET /tabs o POST /tabs/open; también se aceptan etiquetas y
identificadores tabId como t1. Los ids de destino CDP sin procesar y los prefijos únicos
de ids de destino sin procesar siguen funcionando, pero son identificadores de diagnóstico volátiles.
Si la autenticación del gateway con secreto compartido está configurada, las rutas HTTP del navegador también requieren autenticación:
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>o autenticación HTTP Basic con esa contraseña
- Esta API de navegador de loopback independiente no consume encabezados de identidad de proxy de confianza ni de Tailscale Serve.
- Si
gateway.auth.modeesnoneotrusted-proxy, estas rutas de navegador de loopback no heredan esos modos portadores de identidad; mantenlas solo en loopback.
Contrato de errores de /act
POST /act usa una respuesta de error estructurada para validación a nivel de ruta y
fallos de política:
code:
ACT_KIND_REQUIRED(HTTP 400): faltakindo no se reconoce.ACT_INVALID_REQUEST(HTTP 400): el payload de la acción no superó la normalización o validación.ACT_SELECTOR_UNSUPPORTED(HTTP 400): se usóselectorcon un tipo de acción no compatible.ACT_EVALUATE_DISABLED(HTTP 403):evaluate(owait --fn) está deshabilitado por configuración.ACT_TARGET_ID_MISMATCH(HTTP 403): eltargetIdde nivel superior o por lotes entra en conflicto con el destino de la solicitud.ACT_EXISTING_SESSION_UNSUPPORTED(HTTP 501): la acción no es compatible con perfiles de sesión existente.
{ "error": "<message>" } sin un
campo code.
Requisito de Playwright
Algunas funciones (navigate/act/snapshot de IA/snapshot de rol, capturas de pantalla de elementos, PDF) requieren Playwright. Si Playwright no está instalado, esos endpoints devuelven un error 501 claro. Lo que sigue funcionando sin Playwright:- Snapshots ARIA
- Snapshots de accesibilidad estilo rol (
--interactive,--compact,--depth,--efficient) cuando hay disponible un WebSocket CDP por pestaña. Esto es una alternativa para inspección y descubrimiento de refs; Playwright sigue siendo el motor de acciones principal. - Capturas de pantalla de página para el navegador
openclawgestionado cuando hay disponible un WebSocket CDP por pestaña - Capturas de pantalla de página para perfiles
existing-session/ Chrome MCP - Capturas de pantalla basadas en refs de
existing-session(--ref) desde la salida de snapshot
navigateact- Snapshots de IA que dependen del formato nativo de snapshot de IA de Playwright
- Capturas de pantalla de elementos con selector CSS (
--element) - exportación completa del navegador a PDF
--full-page; la ruta devuelve fullPage is not supported for element screenshots.
Si ves Playwright is not available in this gateway build, al Gateway empaquetado
le falta la dependencia central de runtime del navegador. Reinstala o actualiza
OpenClaw y luego reinicia el gateway. Para Docker, instala también los binarios del navegador
Chromium como se muestra a continuación.
Instalación de Playwright en Docker
Si tu Gateway se ejecuta en Docker, evitanpx playwright (conflictos de anulación de npm).
Para imágenes personalizadas, integra Chromium en la imagen:
PLAYWRIGHT_BROWSERS_PATH (por ejemplo,
/home/node/.cache/ms-playwright) y asegúrate de que /home/node se persista mediante
OPENCLAW_HOME_VOLUME o un bind mount. OpenClaw detecta automáticamente el Chromium persistido
en Linux. Consulta Docker.
Cómo funciona (interno)
Un pequeño servidor de control de loopback acepta solicitudes HTTP y se conecta a navegadores basados en Chromium mediante CDP. Las acciones avanzadas (click/type/snapshot/PDF) pasan por Playwright sobre CDP; cuando falta Playwright, solo están disponibles las operaciones que no usan Playwright. El agente ve una interfaz estable mientras los navegadores y perfiles locales/remotos se intercambian libremente por debajo.Referencia rápida de la CLI
Todos los comandos aceptan--browser-profile <name> para apuntar a un perfil específico, y --json para salida legible por máquina.
Basics: status, tabs, open/focus/close
Basics: status, tabs, open/focus/close
Profiles: list, create, delete
Profiles: list, create, delete
Inspection: screenshot, snapshot, console, errors, requests
Inspection: screenshot, snapshot, console, errors, requests
uploadydialogson llamadas de preparación; ejecútalas antes del click/press que activa el selector/cuadro de diálogo. Si una acción abre un modal, la respuesta de la acción incluyeblockedByDialogybrowserState.dialogs.pending; pasa esedialogIdpara responder directamente. Los cuadros de diálogo gestionados fuera de OpenClaw aparecen enbrowserState.dialogs.recent.click/type/etc requieren unarefdesnapshot(numérica12, ref de role12o ref ARIA accionableax12). Los selectores CSS no son compatibles intencionalmente para acciones. Usaclick-coordscuando la posición visible del viewport sea el único destino fiable.- Las rutas de descarga y traza están restringidas a las raíces temporales de OpenClaw:
/tmp/openclaw{,/downloads}(alternativa:${os.tmpdir()}/openclaw/...). uploadacepta archivos desde la raíz temporal de subidas de OpenClaw y medios entrantes gestionados por OpenClaw. Los medios entrantes gestionados pueden referenciarse comomedia://inbound/<id>,media/inbound/<id>relativo al sandbox, o una ruta resuelta dentro del directorio de medios entrantes gestionados. Las refs de medios anidadas, traversal, symlinks, hardlinks y rutas locales arbitrarias se siguen rechazando.uploadtambién puede establecer entradas de archivo directamente mediante--input-refo--element.
suggestedTargetId de tabs en los scripts.
Indicadores de instantáneas de un vistazo:
--format ai(predeterminado con Playwright): instantánea de IA con referencias numéricas (aria-ref="<n>").--format aria: árbol de accesibilidad con referenciasaxN. Cuando Playwright está disponible, OpenClaw vincula las referencias con ids DOM de backend a la página activa para que las acciones de seguimiento puedan usarlas; de lo contrario, trata la salida solo como inspección.--efficient(o--mode efficient): preajuste compacto de instantánea de roles. Configurabrowser.snapshotDefaults.mode: "efficient"para que sea el valor predeterminado (consulta Configuración del Gateway).--interactive,--compact,--depth,--selectorfuerzan una instantánea de roles con referenciasref=e12.--frame "<iframe>"limita las instantáneas de roles a un iframe.- Con Playwright,
--labelsagrega una captura de pantalla con etiquetas de referencia superpuestas (imprimeMEDIA:<path>) más un arregloannotationscon el cuadro delimitador de cada referencia. Enscreenshot, las etiquetas respaldadas por Playwright funcionan con--full-page,--refy--element; ensnapshot, la captura de pantalla adjunta permanece limitada al viewport. Los perfiles existing-session/chrome-mcp renderizan etiquetas superpuestas en capturas de pantalla de página, pero no devuelvenannotationsni usan el helper de proyección de página completa/referencia/elemento de Playwright. Sin Playwright o chrome-mcp, las capturas de pantalla etiquetadas no están disponibles. --urlsagrega los destinos de enlaces descubiertos a las instantáneas de IA.
Instantáneas y referencias
OpenClaw admite dos estilos de “instantánea”:-
Instantánea de IA (referencias numéricas):
openclaw browser snapshot(predeterminado;--format ai)- Salida: una instantánea de texto que incluye referencias numéricas.
- Acciones:
openclaw browser click 12,openclaw browser type 23 "hello". - Internamente, la referencia se resuelve mediante
aria-refde Playwright.
-
Instantánea de roles (referencias de rol como
e12):openclaw browser snapshot --interactive(o--compact,--depth,--selector,--frame)- Salida: una lista/árbol basada en roles con
[ref=e12](y[nth=1]opcional). - Acciones:
openclaw browser click e12,openclaw browser highlight e12. - Internamente, la referencia se resuelve mediante
getByRole(...)(másnth()para duplicados). - Agrega
--labelspara incluir una captura de pantalla con etiquetase12superpuestas. En perfiles respaldados por Playwright, esto también devuelve metadatos de cuadro delimitador por referencia (annotations[]). - Agrega
--urlscuando el texto del enlace sea ambiguo y el agente necesite objetivos de navegación concretos.
- Salida: una lista/árbol basada en roles con
-
Instantánea ARIA (referencias ARIA como
ax12):openclaw browser snapshot --format aria- Salida: el árbol de accesibilidad como nodos estructurados.
- Acciones:
openclaw browser click ax12funciona cuando la ruta de instantánea puede vincular la referencia mediante Playwright e ids DOM de backend de Chrome.
-
Si Playwright no está disponible, las instantáneas ARIA aún pueden ser útiles para
inspección, pero las referencias pueden no ser accionables. Vuelve a tomar una instantánea con
--format aio--interactivecuando necesites referencias de acción. -
Prueba de Docker para la ruta alternativa raw-CDP:
pnpm test:docker:browser-cdp-snapshotinicia Chromium con CDP, ejecutabrowser doctor --deepy verifica que las instantáneas de roles incluyan URL de enlaces, elementos clicables promovidos por cursor y metadatos de iframe.
- Las referencias no son estables entre navegaciones; si algo falla, vuelve a ejecutar
snapshoty usa una referencia nueva. /actdevuelve eltargetIdsin procesar actual después de un reemplazo desencadenado por acción cuando puede probar la pestaña de reemplazo. Sigue usando ids/etiquetas de pestaña estables para comandos de seguimiento.- Si la instantánea de roles se tomó con
--frame, las referencias de rol quedan limitadas a ese iframe hasta la siguiente instantánea de roles. - Las referencias
axNdesconocidas u obsoletas fallan rápido en lugar de pasar al selectoraria-refde Playwright. Ejecuta una instantánea nueva en la misma pestaña cuando eso ocurra.
Potenciadores de espera
Puedes esperar más que solo tiempo/texto:- Esperar URL (globs admitidos por Playwright):
openclaw browser wait --url "**/dash"
- Esperar estado de carga:
openclaw browser wait --load networkidle- Compatible con perfiles administrados
openclawy perfiles CDP sin procesar/remotos. Los perfiles que usan el controladorexisting-session(incluido el perfiluserpredeterminado) rechazannetworkidle; usa esperas con--url,--text, un selector o--fnallí.
- Esperar un predicado JS:
openclaw browser wait --fn "window.ready===true"
- Esperar a que un selector se vuelva visible:
openclaw browser wait "#main"
Flujos de depuración
Cuando una acción falla (por ejemplo, “not visible”, “strict mode violation”, “covered”):openclaw browser snapshot --interactive- Usa
click <ref>/type <ref>(prefiere referencias de rol en modo interactivo) - Si sigue fallando:
openclaw browser highlight <ref>para ver a qué apunta Playwright - Si la página se comporta de forma extraña:
openclaw browser errors --clearopenclaw browser requests --filter api --clear
- Para depuración profunda: graba un trace:
openclaw browser trace start- reproduce el problema
openclaw browser trace stop(imprimeTRACE:<path>)
Salida JSON
--json es para scripting y herramientas estructuradas.
Ejemplos:
refs más un pequeño bloque stats (líneas/caracteres/referencias/interactivo) para que las herramientas puedan razonar sobre el tamaño y la densidad de la carga útil.
Controles de estado y entorno
Son útiles para flujos de trabajo de “hacer que el sitio se comporte como X”:- Cookies:
cookies,cookies set,cookies clear - Almacenamiento:
storage local|session get|set|clear - Sin conexión:
set offline on|off - Encabezados:
set headers --headers-json '{"X-Debug":"1"}'(o la forma posicionalset headers '{"X-Debug":"1"}') - Autenticación básica HTTP:
set credentials user pass(o--clear) - Geolocalización:
set geo <lat> <lon> --origin "https://example.com"(o--clear) - Medios:
set media dark|light|no-preference|none - Zona horaria / configuración regional:
set timezone ...,set locale ... - Dispositivo / viewport:
set device "iPhone 14"(preajustes de dispositivo de Playwright)set viewport 1280 720
Seguridad y privacidad
- El perfil de navegador openclaw puede contener sesiones iniciadas; trátalo como sensible.
browser act kind=evaluate/openclaw browser evaluateywait --fnejecutan JavaScript arbitrario en el contexto de la página. La inyección de prompts puede orientar esto. Desactívalo conbrowser.evaluateEnabled=falsesi no lo necesitas.openclaw browser evaluate --fnacepta el origen de una función, una expresión o el cuerpo de una instrucción. Los cuerpos de instrucciones se envuelven como funciones asíncronas, así que usareturnpara el valor que quieres recuperar. Usa--timeout-ms <ms>cuando la función del lado de la página pueda necesitar más que el tiempo de espera de evaluate predeterminado.- Para notas sobre inicios de sesión y anti-bot (X/Twitter, etc.), consulta Inicio de sesión en navegador + publicación en X/Twitter.
- Mantén privado el host Gateway/node (loopback o solo tailnet).
- Los endpoints CDP remotos son potentes; protégelos y pásalos por túnel.
Relacionado
- Navegador - descripción general, configuración, perfiles, seguridad
- Inicio de sesión en navegador - iniciar sesión en sitios
- Solución de problemas de Browser en Linux
- Solución de problemas de Browser WSL2