Tools
API de contrôle du navigateur
Pour l’installation, la configuration et le dépannage, consultez Navigateur.
Cette page est la référence de l’API HTTP de contrôle local, de la CLI openclaw browser
et des modèles de script (instantanés, références, attentes, flux de débogage).
API de contrôle (facultatif)
Pour les intégrations locales uniquement, le Gateway expose une petite API HTTP local loopback.
Ce serveur autonome est optionnel : définissez la variable d’environnement
OPENCLAW_EAGER_BROWSER_CONTROL_SERVER=1 dans l’environnement du service Gateway
et redémarrez le Gateway avant que les points de terminaison HTTP deviennent disponibles. Sans
cette variable, le runtime de contrôle du navigateur fonctionne toujours via la CLI et les
outils d’agent, mais rien n’écoute sur le port de contrôle local loopback.
- État/démarrage/arrêt :
GET /,POST /start,POST /stop - Onglets :
GET /tabs,POST /tabs/open,POST /tabs/focus,DELETE /tabs/:targetId - Instantané/capture d’écran :
GET /snapshot,POST /screenshot - Actions :
POST /navigate,POST /act - Hooks :
POST /hooks/file-chooser,POST /hooks/dialog - Téléchargements :
POST /download,POST /wait/download - Autorisations :
POST /permissions/grant - Débogage :
GET /console,POST /pdf - Débogage :
GET /errors,GET /requests,POST /trace/start,POST /trace/stop,POST /highlight - Réseau :
POST /response/body - État :
GET /cookies,POST /cookies/set,POST /cookies/clear - État :
GET /storage/:kind,POST /storage/:kind/set,POST /storage/:kind/clear - Paramètres :
POST /set/offline,POST /set/headers,POST /set/credentials,POST /set/geolocation,POST /set/media,POST /set/timezone,POST /set/locale,POST /set/device
Tous les points de terminaison acceptent ?profile=<name>. POST /start?headless=true demande un
lancement headless ponctuel pour les profils gérés localement sans modifier la
configuration de navigateur persistée ; les profils attach-only, CDP distant et session existante refusent
ce remplacement, car OpenClaw ne lance pas ces processus de navigateur.
Pour les points de terminaison d’onglets, targetId est le nom du champ de compatibilité. Préférez passer
suggestedTargetId depuis GET /tabs ou POST /tabs/open ; les libellés et les handles tabId
comme t1 sont aussi acceptés. Les identifiants de cible CDP bruts et les préfixes uniques d’identifiant de
cible brut fonctionnent encore, mais ce sont des handles de diagnostic volatils.
Si l’authentification Gateway par secret partagé est configurée, les routes HTTP du navigateur exigent aussi l’authentification :
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>ou authentification HTTP Basic avec ce mot de passe
Notes :
- Cette API de navigateur local loopback autonome ne consomme pas les en-têtes d’identité trusted-proxy ou Tailscale Serve.
- Si
gateway.auth.modevautnoneoutrusted-proxy, ces routes de navigateur local loopback n’héritent pas de ces modes porteurs d’identité ; gardez-les limitées au local loopback.
Contrat d’erreur de /act
POST /act utilise une réponse d’erreur structurée pour la validation au niveau de la route et
les échecs de stratégie :
{ "error": "<message>", "code": "ACT_*" }Valeurs actuelles de code :
ACT_KIND_REQUIRED(HTTP 400) :kindest manquant ou non reconnu.ACT_INVALID_REQUEST(HTTP 400) : la charge utile de l’action a échoué à la normalisation ou à la validation.ACT_SELECTOR_UNSUPPORTED(HTTP 400) :selectora été utilisé avec un type d’action non pris en charge.ACT_EVALUATE_DISABLED(HTTP 403) :evaluate(ouwait --fn) est désactivé par la configuration.ACT_TARGET_ID_MISMATCH(HTTP 403) : letargetIdde premier niveau ou groupé est en conflit avec la cible de la requête.ACT_EXISTING_SESSION_UNSUPPORTED(HTTP 501) : l’action n’est pas prise en charge pour les profils de session existante.
D’autres échecs d’exécution peuvent toujours renvoyer { "error": "<message>" } sans champ
code.
Exigence Playwright
Certaines fonctionnalités (navigate/act/instantané IA/instantané de rôles, captures d’écran d’éléments, PDF) exigent Playwright. Si Playwright n’est pas installé, ces points de terminaison renvoient une erreur 501 claire.
Ce qui fonctionne toujours sans Playwright :
- Instantanés ARIA
- Instantanés d’accessibilité de style rôle (
--interactive,--compact,--depth,--efficient) lorsqu’un WebSocket CDP par onglet est disponible. Il s’agit d’un repli pour l’inspection et la découverte de références ; Playwright reste le moteur d’action principal. - Captures d’écran de page pour le navigateur
openclawgéré lorsqu’un WebSocket CDP par onglet est disponible - Captures d’écran de page pour les profils
existing-session/ Chrome MCP - Captures d’écran fondées sur les références
existing-session(--ref) depuis la sortie d’instantané
Ce qui nécessite toujours Playwright :
navigateact- Instantanés IA qui dépendent du format d’instantané IA natif de Playwright
- Captures d’écran d’élément par sélecteur CSS (
--element) - export PDF complet du navigateur
Les captures d’écran d’éléments refusent aussi --full-page ; la route renvoie fullPage is not supported for element screenshots.
Si vous voyez Playwright is not available in this gateway build, il manque au
Gateway empaqueté la dépendance principale du runtime de navigateur. Réinstallez ou mettez à jour
OpenClaw, puis redémarrez le Gateway. Pour Docker, installez aussi les binaires du navigateur
Chromium comme indiqué ci-dessous.
Installation de Playwright avec Docker
Si votre Gateway s’exécute dans Docker, évitez npx playwright (conflits de remplacement npm).
Pour les images personnalisées, intégrez Chromium dans l’image :
OPENCLAW_INSTALL_BROWSER=1 ./scripts/docker/setup.shPour une image existante, installez plutôt via la CLI groupée :
docker compose run --rm openclaw-cli \ node /app/node_modules/playwright-core/cli.js install chromiumPour persister les téléchargements du navigateur, définissez PLAYWRIGHT_BROWSERS_PATH (par exemple,
/home/node/.cache/ms-playwright) et assurez-vous que /home/node est persisté via
OPENCLAW_HOME_VOLUME ou un montage bind. OpenClaw détecte automatiquement le
Chromium persisté sous Linux. Consultez Docker.
Fonctionnement (interne)
Un petit serveur de contrôle local loopback accepte les requêtes HTTP et se connecte aux navigateurs basés sur Chromium via CDP. Les actions avancées (click/type/snapshot/PDF) passent par Playwright au-dessus de CDP ; lorsque Playwright est absent, seules les opérations hors Playwright sont disponibles. L’agent voit une interface stable unique tandis que les navigateurs et profils locaux/distants peuvent être remplacés librement en dessous.
Référence rapide de la CLI
Toutes les commandes acceptent --browser-profile <name> pour cibler un profil précis, et --json pour une sortie lisible par machine.
Bases : état, onglets, ouvrir/focaliser/fermer
openclaw browser statusopenclaw browser startopenclaw browser start --headless # one-shot local managed headless launchopenclaw browser stop # also clears emulation on attach-only/remote CDPopenclaw browser tabsopenclaw browser tab # shortcut for current tabopenclaw browser tab newopenclaw browser tab select 2openclaw browser tab close 2openclaw browser open https://example.comopenclaw browser focus abcd1234openclaw browser close abcd1234Inspection : capture d’écran, instantané, console, erreurs, requêtes
openclaw browser screenshotopenclaw browser screenshot --full-pageopenclaw browser screenshot --ref 12 # or --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 console --level erroropenclaw browser errors --clearopenclaw browser requests --filter api --clearopenclaw browser pdfopenclaw browser responsebody "**/api" --max-chars 5000Actions : naviguer, cliquer, saisir, glisser, attendre, évaluer
openclaw browser navigate https://example.comopenclaw browser resize 1280 720openclaw browser click 12 --double # or e12 for role refsopenclaw browser click-coords 120 340 # viewport coordinatesopenclaw 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 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 stopÉtat : cookies, stockage, hors ligne, en-têtes, géolocalisation, appareil
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 to removeopenclaw 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"Notes :
uploadetdialogsont des appels d’armement ; exécutez-les avant le clic/la pression de touche qui déclenche le sélecteur/la boîte de dialogue. Si une action ouvre une fenêtre modale, la réponse de l’action inclutblockedByDialogetbrowserState.dialogs.pending; passez cedialogIdpour répondre directement. Les boîtes de dialogue gérées hors d’OpenClaw apparaissent sousbrowserState.dialogs.recent.click/type/etc exigent unerefissue desnapshot(12numérique, référence de rôlee12ou référence ARIA actionnableax12). Les sélecteurs CSS ne sont volontairement pas pris en charge pour les actions. Utilisezclick-coordslorsque la position visible dans la fenêtre d’affichage est la seule cible fiable.- Les chemins de téléchargement et de trace sont limités aux racines temporaires OpenClaw :
/tmp/openclaw{,/downloads}(repli :${os.tmpdir()}/openclaw/...). uploadaccepte les fichiers depuis la racine temporaire de téléversements OpenClaw et les médias entrants gérés par OpenClaw. Les médias entrants gérés peuvent être référencés commemedia://inbound/<id>,media/inbound/<id>relatif au sandbox, ou un chemin résolu dans le répertoire de médias entrants gérés. Les références média imbriquées, la traversée de répertoires, les liens symboliques, les liens physiques et les chemins locaux arbitraires restent refusés.uploadpeut aussi définir directement les entrées de fichiers via--input-refou--element.
Les identifiants et libellés d’onglets stables survivent au remplacement de cible brute Chromium lorsque OpenClaw
peut prouver l’onglet de remplacement, par exemple avec la même URL ou un seul ancien onglet devenant un
seul nouvel onglet après soumission de formulaire. Les identifiants de cible bruts restent volatils ; préférez
suggestedTargetId depuis tabs dans les scripts.
Aperçu des indicateurs d’instantané :
--format ai(par défaut avec Playwright) : instantané IA avec références numériques (aria-ref="<n>").--format aria: arbre d’accessibilité avec référencesaxN. Lorsque Playwright est disponible, OpenClaw lie les références aux identifiants DOM backend de la page active afin que les actions de suivi puissent les utiliser ; sinon, traitez la sortie comme destinée uniquement à l’inspection.--efficient(ou--mode efficient) : préréglage compact d’instantané de rôles. Définissezbrowser.snapshotDefaults.mode: "efficient"pour en faire la valeur par défaut (voir configuration du Gateway).--interactive,--compact,--depth,--selectorforcent un instantané de rôles avec des référencesref=e12.--frame "<iframe>"limite les instantanés de rôles à une iframe.- Avec Playwright,
--labelsajoute une capture d’écran avec des étiquettes de références superposées (afficheMEDIA:<path>) ainsi qu’un tableauannotationscontenant la boîte englobante de chaque référence. Surscreenshot, les étiquettes adossées à Playwright fonctionnent avec--full-page,--refet--element; sursnapshot, la capture d’écran associée reste limitée à la fenêtre d’affichage. Les profils de session existante/chrome-mcp affichent les étiquettes superposées sur les captures d’écran de page, mais ne renvoient pasannotationset n’utilisent pas l’assistant de projection pleine page/référence/élément de Playwright. Sans Playwright ni chrome-mcp, les captures d’écran étiquetées ne sont pas disponibles. --urlsajoute les destinations de liens découvertes aux instantanés IA.
Instantanés et références
OpenClaw prend en charge deux styles d’« instantané » :
-
Instantané IA (références numériques) :
openclaw browser snapshot(par défaut ;--format ai)- Sortie : un instantané texte qui inclut des références numériques.
- Actions :
openclaw browser click 12,openclaw browser type 23 "hello". - En interne, la référence est résolue via
aria-refde Playwright.
-
Instantané de rôles (références de rôle comme
e12) :openclaw browser snapshot --interactive(ou--compact,--depth,--selector,--frame)- Sortie : une liste/arborescence basée sur les rôles avec
[ref=e12](et éventuellement[nth=1]). - Actions :
openclaw browser click e12,openclaw browser highlight e12. - En interne, la référence est résolue via
getByRole(...)(plusnth()pour les doublons). - Ajoutez
--labelspour inclure une capture d’écran avec des étiquettese12superposées. Sur les profils adossés à Playwright, cela renvoie aussi des métadonnées de boîte englobante par référence (annotations[]). - Ajoutez
--urlslorsque le texte du lien est ambigu et que l’agent a besoin de cibles de navigation concrètes.
- Sortie : une liste/arborescence basée sur les rôles avec
-
Instantané ARIA (références ARIA comme
ax12) :openclaw browser snapshot --format aria- Sortie : l’arbre d’accessibilité sous forme de nœuds structurés.
- Actions :
openclaw browser click ax12fonctionne lorsque le chemin d’instantané peut lier la référence via Playwright et les identifiants DOM backend de Chrome.
-
Si Playwright n’est pas disponible, les instantanés ARIA peuvent tout de même être utiles pour l’inspection, mais les références peuvent ne pas être exploitables. Reprenez un instantané avec
--format aiou--interactivelorsque vous avez besoin de références d’action. -
Preuve Docker pour le chemin de repli CDP brut :
pnpm test:docker:browser-cdp-snapshotdémarre Chromium avec CDP, exécutebrowser doctor --deepet vérifie que les instantanés de rôles incluent les URL de liens, les éléments cliquables promus par curseur et les métadonnées d’iframe.
Comportement des références :
- Les références ne sont pas stables entre les navigations ; en cas d’échec, relancez
snapshotet utilisez une nouvelle référence. /actrenvoie letargetIdbrut actuel après un remplacement déclenché par une action lorsqu’il peut prouver l’onglet de remplacement. Continuez à utiliser des identifiants/étiquettes d’onglets stables pour les commandes suivantes.- Si l’instantané de rôles a été pris avec
--frame, les références de rôle sont limitées à cette iframe jusqu’au prochain instantané de rôles. - Les références
axNinconnues ou périmées échouent rapidement au lieu de retomber sur le sélecteuraria-refde Playwright. Exécutez un nouvel instantané sur le même onglet lorsque cela se produit.
Capacités d’attente avancées
Vous pouvez attendre davantage que du temps ou du texte :
- Attendre une URL (globs pris en charge par Playwright) :
openclaw browser wait --url "**/dash"
- Attendre un état de chargement :
openclaw browser wait --load networkidle- Pris en charge sur les profils CDP gérés
openclawet bruts/distants. Les profilsuseretexisting-sessionrejettentnetworkidle; utilisez plutôt--url,--text, un sélecteur ou des attentes--fn.
- Attendre un prédicat JS :
openclaw browser wait --fn "window.ready===true"
- Attendre qu’un sélecteur devienne visible :
openclaw browser wait "#main"
Ils peuvent être combinés :
openclaw browser wait "#main" \ --url "**/dash" \ --load networkidle \ --fn "window.ready===true" \ --timeout-ms 15000Flux de débogage
Lorsqu’une action échoue (par exemple « non visible », « violation du mode strict », « couvert ») :
openclaw browser snapshot --interactive- Utilisez
click <ref>/type <ref>(préférez les références de rôle en mode interactif) - Si l’échec persiste :
openclaw browser highlight <ref>pour voir ce que Playwright cible - Si la page se comporte étrangement :
openclaw browser errors --clearopenclaw browser requests --filter api --clear
- Pour un débogage approfondi : enregistrez une trace :
openclaw browser trace start- reproduisez le problème
openclaw browser trace stop(afficheTRACE:<path>)
Sortie JSON
--json est destiné aux scripts et aux outils structurés.
Exemples :
openclaw browser status --jsonopenclaw browser snapshot --interactive --jsonopenclaw browser requests --filter api --jsonopenclaw browser cookies --jsonLes instantanés de rôles en JSON incluent refs ainsi qu’un petit bloc stats (lignes/caractères/références/interactif) afin que les outils puissent raisonner sur la taille et la densité de la charge utile.
Paramètres d’état et d’environnement
Ils sont utiles pour les flux de travail du type « faire se comporter le site comme X » :
- Cookies :
cookies,cookies set,cookies clear - Stockage :
storage local|session get|set|clear - Hors ligne :
set offline on|off - En-têtes :
set headers --headers-json '{"X-Debug":"1"}'(l’ancienset headers --json '{"X-Debug":"1"}'reste pris en charge) - Authentification HTTP basique :
set credentials user pass(ou--clear) - Géolocalisation :
set geo <lat> <lon> --origin "https://example.com"(ou--clear) - Média :
set media dark|light|no-preference|none - Fuseau horaire / locale :
set timezone ...,set locale ... - Appareil / fenêtre d’affichage :
set device "iPhone 14"(préréglages d’appareils Playwright)set viewport 1280 720
Sécurité et confidentialité
- Le profil de navigateur openclaw peut contenir des sessions connectées ; traitez-le comme sensible.
browser act kind=evaluate/openclaw browser evaluateetwait --fnexécutent du JavaScript arbitraire dans le contexte de la page. Une injection de prompt peut orienter cela. Désactivez-le avecbrowser.evaluateEnabled=falsesi vous n’en avez pas besoin.openclaw browser evaluate --fnaccepte la source d’une fonction, une expression ou un corps d’instruction. Les corps d’instruction sont enveloppés dans des fonctions asynchrones ; utilisez doncreturnpour la valeur que vous souhaitez récupérer. Utilisez--timeout-ms <ms>lorsque la fonction côté page peut nécessiter plus de temps que le délai d’évaluation par défaut.- Pour les connexions et les notes anti-bot (X/Twitter, etc.), consultez Connexion navigateur + publication X/Twitter.
- Gardez l’hôte Gateway/nœud privé (loopback ou tailnet uniquement).
- Les points de terminaison CDP distants sont puissants ; tunnelisez-les et protégez-les.
Exemple de mode strict (bloquer les destinations privées/internes par défaut) :
{ browser: { ssrfPolicy: { dangerouslyAllowPrivateNetwork: false, hostnameAllowlist: ["*.example.com", "example.com"], allowedHostnames: ["localhost"], // optional exact allow }, },}Connexe
- Navigateur - vue d’ensemble, configuration, profils, sécurité
- Connexion navigateur - connexion aux sites
- Dépannage du navigateur sous Linux
- Dépannage du navigateur WSL2