Tools
API de control del navegador
Para la instalación, la configuración y la resolución de problemas, consulte Navegador.
Esta página es la referencia de la API HTTP de control local, la CLI openclaw browser
y los patrones de automatización mediante scripts (instantáneas, referencias, esperas y flujos de depuración).
API de control (opcional)
Solo para integraciones locales, el Gateway expone una pequeña API HTTP de bucle invertido.
Este servidor independiente es opcional: establezca la variable de entorno
OPENCLAW_EAGER_BROWSER_CONTROL_SERVER=1 en el entorno del servicio del gateway
y reinicie el gateway antes de que los endpoints HTTP estén disponibles. Sin
esta variable, el entorno de ejecución de control del navegador sigue funcionando mediante la CLI y
las herramientas del agente, pero nada escucha en el puerto de control de bucle invertido.
- Estado/inicio/detención:
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 - Instantánea/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 el formato por lotes que la CLI utiliza internamente para
los subcomandos browser tab ({"action":"new"|"label"|"select"|"close"|"list", ...});
al automatizar directamente mediante scripts, prefiera las rutas específicas para pestañas anteriores.
Todos los endpoints aceptan ?profile=<name>. POST /start?headless=true solicita un
inicio puntual sin interfaz gráfica para perfiles locales administrados sin cambiar la configuración
persistente del navegador; los perfiles de solo conexión, CDP remoto y sesión existente rechazan
esa sobrescritura porque OpenClaw no inicia esos procesos del navegador.
Para los endpoints de pestañas, targetId es el nombre del campo de compatibilidad. Prefiera pasar
suggestedTargetId desde GET /tabs o POST /tabs/open; también se aceptan las etiquetas y los
identificadores tabId, como t1. Los identificadores de destino CDP sin procesar y los prefijos únicos
de dichos identificadores siguen funcionando, pero son identificadores de diagnóstico volátiles.
Si se configura la autenticación del gateway mediante secreto compartido, 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
Notas:
- Esta API independiente del navegador mediante bucle invertido no utiliza encabezados de identidad de proxy de confianza ni de Tailscale Serve.
- Si
gateway.auth.modeesnoneotrusted-proxy, estas rutas del navegador mediante bucle invertido no heredan esos modos basados en identidad; manténgalas accesibles solo mediante bucle invertido.
Contrato de errores de /act
POST /act utiliza una respuesta de error estructurada para los fallos de validación y
de políticas en el nivel de ruta:
{ "error": "<message>", "code": "ACT_*" }Valores actuales de code:
ACT_KIND_REQUIRED(HTTP 400): faltakindo no se reconoce.ACT_INVALID_REQUEST(HTTP 400): la carga de la acción no superó la normalización o la validación.ACT_SELECTOR_UNSUPPORTED(HTTP 400): se utilizóselectorcon un tipo de acción no compatible.ACT_EVALUATE_DISABLED(HTTP 403):evaluate(owait --fn) está desactivado por la 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.
Otros fallos del entorno de ejecución aún pueden devolver { "error": "<message>" } sin un
campo code.
Requisito de Playwright
Algunas funciones (navegación/acción/instantánea de IA/instantánea de roles, capturas de elementos y PDF) requieren Playwright. Si Playwright no está instalado, esos endpoints devuelven un error 501 claro.
Qué sigue funcionando sin Playwright:
- Instantáneas ARIA
- Instantáneas de accesibilidad con formato de roles (
--interactive,--compact,--depth,--efficient) cuando hay disponible un WebSocket CDP por pestaña. Esta es una alternativa para la inspección y la detección de referencias; Playwright sigue siendo el motor principal de acciones. - Capturas de página para el navegador
openclawadministrado cuando hay disponible un WebSocket CDP por pestaña - Capturas de página para perfiles
existing-session/ Chrome MCP - Capturas basadas en referencias (
--ref) paraexisting-sessiona partir de la salida de instantáneas
Qué sigue necesitando Playwright:
navigateact- Instantáneas de IA que dependen del formato nativo de instantáneas de IA de Playwright
- Capturas de elementos mediante selectores CSS (
--element) - Exportación completa del navegador a PDF
Las capturas de elementos también rechazan --full-page; la ruta devuelve fullPage is not supported for element screenshots.
Si aparece Playwright is not available in this gateway build, al Gateway
empaquetado le falta la dependencia principal del entorno de ejecución del navegador. Reinstale o actualice
OpenClaw y, a continuación, reinicie el gateway. Para Docker, instale también los archivos binarios
del navegador Chromium como se muestra a continuación.
Instalación de Playwright en Docker
Si el Gateway se ejecuta en Docker, evite npx playwright (conflictos de sobrescritura de npm).
Para imágenes personalizadas, incorpore Chromium en la imagen:
OPENCLAW_INSTALL_BROWSER=1 ./scripts/docker/setup.shPara una imagen existente, instálelo mediante la CLI incluida:
docker compose run --rm openclaw-cli \ node /app/node_modules/playwright-core/cli.js install chromiumPara conservar las descargas del navegador, establezca PLAYWRIGHT_BROWSERS_PATH (por ejemplo,
/home/node/.cache/ms-playwright) y asegúrese de que /home/node se conserve mediante
OPENCLAW_HOME_VOLUME o un montaje enlazado. OpenClaw detecta automáticamente el
Chromium persistente en Linux. Consulte Docker.
Cómo funciona (interno)
Un pequeño servidor de control mediante bucle invertido acepta solicitudes HTTP y se conecta a navegadores basados en Chromium mediante CDP. Las acciones avanzadas (hacer clic/escribir/obtener instantáneas/PDF) pasan por Playwright sobre CDP; cuando Playwright no está disponible, solo están disponibles las operaciones que no dependen de Playwright. El agente utiliza una única 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 seleccionar un perfil específico y --json para obtener una salida legible por máquinas.
Conceptos básicos: estado, pestañas, abrir/enfocar/cerrar
openclaw browser statusopenclaw browser doctoropenclaw browser doctor --deep # añade una comprobación activa mediante instantáneaopenclaw browser startopenclaw browser start --headless # inicio puntual local administrado sin interfaz gráficaopenclaw browser stop # también borra la emulación en conexiones de solo conexión/CDP remotoopenclaw browser reset-profile # mueve los datos del navegador del perfil a la papeleraopenclaw browser tabsopenclaw browser tab # acceso directo a la pestaña actualopenclaw browser tab newopenclaw browser tab new --label researchopenclaw browser tab label abcd1234 researchopenclaw browser tab select 2openclaw browser tab close 2openclaw browser open https://example.comopenclaw browser focus abcd1234openclaw browser close abcd1234Perfiles: enumerar, crear, eliminar
openclaw browser profilesopenclaw browser create-profile --name research --color "#0066CC"openclaw browser create-profile --name attach --driver existing-session --cdp-url http://127.0.0.1:9222openclaw browser delete-profile --name researchInspección: captura, instantánea, consola, errores, solicitudes
openclaw browser screenshotopenclaw browser screenshot --full-pageopenclaw browser screenshot --ref 12 # o --ref e12openclaw browser screenshot --labelsopenclaw browser snapshotopenclaw browser snapshot --format aria --limit 200openclaw browser snapshot --interactive --compact --depth 6openclaw browser snapshot --efficientopenclaw browser snapshot --labelsopenclaw browser snapshot --urlsopenclaw browser snapshot --selector "#main" --interactiveopenclaw browser snapshot --frame "iframe#main" --interactiveopenclaw browser snapshot --out snapshot.txtopenclaw browser console --level erroropenclaw browser errors --clearopenclaw browser requests --filter api --clearopenclaw browser pdfopenclaw browser responsebody "**/api" --max-chars 5000Acciones: navegar, hacer clic, escribir, arrastrar, esperar, evaluar
openclaw browser navigate https://example.comopenclaw browser resize 1280 720openclaw browser click 12 --double # o e12 para referencias de rolesopenclaw browser click-coords 120 340 # coordenadas de la ventana gráficaopenclaw 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 report.pdfopenclaw browser waitfordownload report.pdfopenclaw browser upload /tmp/openclaw/uploads/file.pdfopenclaw browser upload /tmp/openclaw/uploads/file.pdf --ref e12openclaw browser upload media://inbound/file.pdfopenclaw browser fill --fields '[{"ref":"1","type":"text","value":"Ada"}]'openclaw browser dialog --acceptopenclaw browser dialog --dismiss --dialog-id d1openclaw 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 evaluate --fn 'const title = document.title; return title;'openclaw browser evaluate --timeout-ms 30000 --fn 'async () => { await window.ready; return true; }'openclaw browser highlight e12openclaw browser trace startopenclaw browser trace stopEstado: cookies, almacenamiento, modo sin conexión, encabezados, ubicación geográfica, dispositivo
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 --headers-json '{"X-Debug":"1"}'openclaw browser set credentials user pass # --clear para eliminarlasopenclaw browser set geo 37.7749 -122.4194 --origin "https://example.com"openclaw browser set media darkopenclaw browser set timezone America/New_Yorkopenclaw browser set locale en-USopenclaw browser set device "iPhone 14"Notas:
- La herramienta
browserorientada al agente exponeaction=download(requiererefypath) yaction=waitfordownload(pathopcional). Ambas devuelven la URL de descarga guardada, el nombre de archivo sugerido y la ruta local protegida. La interceptación explícita de descargas está disponible para perfiles de Playwright administrados; los perfiles de sesiones existentes devuelven un error de operación no compatible. - Se recomienda usar cargas atómicas mediante el selector de archivos: pase el activador
--refjunto con la carga para que OpenClaw prepare y haga clic en una sola solicitud.uploadsolo con rutas sigue siendo compatible cuando se pretende usar un activador posterior. Use--input-refo--elementpara establecer directamente una entrada de archivo.dialoges una llamada de preparación; ejecútela antes del clic o la pulsación que activa el diálogo. Si una acción abre una ventana modal, la respuesta de la acción incluyeblockedByDialogybrowserState.dialogs.pending; pase esedialogIdpara responder directamente. Los diálogos gestionados fuera de OpenClaw aparecen enbrowserState.dialogs.recent. click/type/etc. requieren unarefdesnapshot(numérica12, referencia de role12o referencia ARIA accionableax12). Los selectores CSS no son compatibles intencionadamente para las acciones. Useclick-coordscuando la posición visible en el viewport sea el único objetivo fiable.- Las rutas de descarga y de traza están restringidas a las raíces temporales de OpenClaw:
/tmp/openclaw{,/downloads}(alternativa:${os.tmpdir()}/openclaw/...). uploadacepta archivos de la raíz temporal de cargas de OpenClaw y contenido multimedia entrante administrado por OpenClaw. Se puede hacer referencia al contenido multimedia entrante administrado mediantemedia://inbound/<id>,media/inbound/<id>relativo al sandbox o una ruta resuelta dentro del directorio de contenido multimedia entrante administrado. Se siguen rechazando las referencias anidadas a contenido multimedia, el recorrido de directorios, los enlaces simbólicos, los enlaces duros y las rutas locales arbitrarias.uploadtambién puede establecer directamente entradas de archivo mediante--input-refo--element.
Los identificadores y las etiquetas estables de pestañas sobreviven al reemplazo de destinos sin procesar de Chromium cuando OpenClaw
puede demostrar cuál es la pestaña de reemplazo, como ocurre con un par antiguo/nuevo único para la misma URL o
cuando una sola pestaña antigua se convierte en una sola pestaña nueva tras enviar un formulario. Los reemplazos
ambiguos con URL duplicadas reciben identificadores nuevos. Los identificadores de destino sin procesar siguen siendo
volátiles; en los scripts, se recomienda usar suggestedTargetId de tabs.
Resumen de las opciones de instantáneas:
--format ai(valor predeterminado con Playwright): instantánea para IA con referencias numéricas (aria-ref="<n>").--format aria: árbol de accesibilidad con referenciasaxN. Cuando Playwright está disponible, OpenClaw vincula las referencias con identificadores DOM del backend a la página activa para que las acciones posteriores puedan usarlas; de lo contrario, trate la salida únicamente como material de inspección.--efficient(o--mode efficient): preajuste de instantánea compacta de roles. Establezcabrowser.snapshotDefaults.mode: "efficient"para que sea el valor predeterminado (consulte 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,
--labelsañade una captura de pantalla con etiquetas de referencia superpuestas (muestraMEDIA:<path>) y 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 sigue limitándose al viewport. Los perfiles de sesión existente/chrome-mcp muestran etiquetas superpuestas en las capturas de pantalla de la página, pero no devuelvenannotationsni usan el asistente de proyección de página completa/referencia/elemento de Playwright. Sin Playwright ni chrome-mcp, las capturas de pantalla con etiquetas no están disponibles. --urlsañade los destinos de enlaces detectados a las instantáneas para IA.
Instantáneas y referencias
OpenClaw admite dos estilos de "instantánea":
-
Instantánea para 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 o árbol basado 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). - Añada
--labelspara incluir una captura de pantalla con etiquetase12superpuestas. En los perfiles respaldados por Playwright, esto también devuelve metadatos del cuadro delimitador por referencia (annotations[]). - Añada
--urlscuando el texto del enlace sea ambiguo y el agente necesite destinos de navegación concretos.
- Salida: una lista o árbol basado 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 la instantánea puede vincular la referencia mediante Playwright y los identificadores DOM del backend de Chrome.
-
Si Playwright no está disponible, las instantáneas ARIA aún pueden ser útiles para la inspección, pero es posible que las referencias no sean accionables. Vuelva a crear la instantánea con
--format aio--interactivecuando necesite referencias de acción. -
Prueba con Docker para la ruta alternativa de CDP sin procesar:
pnpm test:docker:browser-cdp-snapshotinicia Chromium con CDP, ejecutabrowser doctor --deepy verifica que las instantáneas de roles incluyan URL de enlaces, elementos en los que se puede hacer clic detectados por el cursor y metadatos de iframe.
Comportamiento de las referencias:
- Las referencias no son estables entre navegaciones; si algo falla, vuelva a ejecutar
snapshoty use una referencia nueva. /actdevuelve eltargetIdsin procesar actual después de un reemplazo activado por una acción cuando puede demostrar cuál es la pestaña de reemplazo. Siga usando identificadores o etiquetas estables de pestañas para los comandos posteriores.- 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 de inmediato en lugar de recurrir al selectoraria-refde Playwright. Ejecute una instantánea nueva en la misma pestaña cuando esto ocurra.
Capacidades avanzadas de espera
Se puede esperar por algo más que tiempo o texto:
- Esperar una URL (Playwright admite patrones glob):
openclaw browser wait --url "**/dash"
- Esperar un estado de carga:
openclaw browser wait --load networkidle- Compatible con perfiles CDP administrados
openclawy sin procesar/remotos. Los perfiles que usan el controladorexisting-session(incluido el perfiluserpredeterminado) rechazannetworkidle; use esperas con--url,--text, un selector o--fnen esos perfiles.
- Esperar un predicado de JS:
openclaw browser wait --fn "window.ready===true"
- Esperar a que un selector sea visible:
openclaw browser wait "#main"
Estas opciones se pueden combinar:
openclaw browser wait "#main" \ --url "**/dash" \ --load networkidle \ --fn "window.ready===true" \ --timeout-ms 15000Flujos de trabajo de depuración
Cuando una acción falla (por ejemplo, "no visible", "infracción del modo estricto", "cubierto"):
openclaw browser snapshot --interactive- Use
click <ref>/type <ref>(se recomiendan las referencias de rol en el 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 una depuración profunda, registre una traza:
openclaw browser trace start- reproduzca el problema
openclaw browser trace stop(muestraTRACE:<path>)
Salida JSON
--json sirve para scripts y herramientas estructuradas.
Ejemplos:
openclaw browser --json statusopenclaw browser --json snapshot --interactiveopenclaw browser --json requests --filter apiopenclaw browser --json cookiesLas instantáneas de roles en JSON incluyen refs y un pequeño bloque stats (líneas/caracteres/referencias/elementos interactivos) para que las herramientas puedan evaluar el tamaño y la densidad de la carga útil.
Controles de estado y entorno
Son útiles para flujos de trabajo del tipo "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 HTTP básica:
set credentials user pass(o--clear) - Geolocalización:
set geo <lat> <lon> --origin "https://example.com"(o--clear) - Contenido multimedia:
set media dark|light|no-preference|none - Zona horaria/configuración regional:
set timezone ...,set locale ... - Dispositivo/viewport:
set device "iPhone 14"(preajustes de dispositivos de Playwright)set viewport 1280 720
Seguridad y privacidad
- El perfil de navegador de OpenClaw puede contener sesiones autenticadas; trátelo como información confidencial.
browser act kind=evaluate/openclaw browser evaluateywait --fnejecutan JavaScript arbitrario en el contexto de la página. Una inyección de prompt puede dirigir esta ejecución. Desactívela conbrowser.evaluateEnabled=falsesi no la necesita.openclaw browser evaluate --fnacepta el código fuente de una función, una expresión o el cuerpo de una sentencia. Los cuerpos de sentencias se envuelven como funciones asíncronas, por lo que debe usarreturnpara el valor que desea obtener. Use--timeout-ms <ms>cuando la función del lado de la página pueda necesitar más tiempo que el límite de evaluación predeterminado.- Para inicios de sesión y notas sobre sistemas antibot (X/Twitter, etc.), consulte Inicio de sesión en el navegador y publicación en X/Twitter.
- Mantenga privado el host del Gateway/Node (solo loopback o tailnet).
- Los endpoints CDP remotos son potentes; use un túnel y protéjalos.
Ejemplo de modo estricto (bloquea de forma predeterminada los destinos privados/internos):
{ browser: { ssrfPolicy: { dangerouslyAllowPrivateNetwork: false, hostnameAllowlist: ["*.example.com", "example.com"], allowedHostnames: ["localhost"], // permiso exacto opcional }, },}Temas relacionados
- Navegador - descripción general, configuración, perfiles y seguridad
- Inicio de sesión en el navegador - inicio de sesión en sitios
- Solución de problemas del navegador en Linux
- Solución de problemas del navegador en WSL2