Tools
API de contrôle du navigateur
Pour l’installation, la configuration et le dépannage, consultez Navigateur.
Cette page constitue la référence pour l’API HTTP locale de contrôle, la CLI
openclaw browser et les modèles de script (instantanés, références, attentes, flux de débogage).
API de contrôle (facultative)
Pour les intégrations locales uniquement, le Gateway expose une petite API HTTP sur l’interface de bouclage.
Ce serveur autonome est facultatif — 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, l’environnement d’exécution de contrôle du navigateur fonctionne toujours par l’intermédiaire de la CLI et
des outils de l’agent, mais rien n’écoute sur le port de contrôle de l’interface de bouclage.
- État/démarrage/arrêt :
GET /,GET /doctor,POST /start,POST /stop,POST /reset-profile - Profils :
GET /profiles,POST /profiles/create,DELETE /profiles/:name - Onglets :
GET /tabs,POST /tabs/open,POST /tabs/focus,DELETE /tabs/:targetId,POST /tabs/action - Instantané/capture d’écran :
GET /snapshot,POST /screenshot - Actions :
POST /navigate,POST /act - Crochets :
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,GET /dialogs,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
POST /tabs/action est la forme groupée que la CLI utilise en interne pour les
sous-commandes browser tab ({"action":"new"|"label"|"select"|"close"|"list", ...}) ;
pour les scripts directs, privilégiez les routes d’onglet spécialisées ci-dessus.
Tous les points de terminaison acceptent ?profile=<name>. POST /start?headless=true demande un
lancement ponctuel sans interface graphique pour les profils locaux gérés, sans modifier la configuration
persistante du navigateur ; les profils limités à la connexion, CDP distants et de session existante refusent
cette substitution, car OpenClaw ne lance pas ces processus de navigateur.
Pour les points de terminaison d’onglet, targetId est le nom de champ de compatibilité. Privilégiez
suggestedTargetId provenant de GET /tabs ou POST /tabs/open ; les étiquettes et les identifiants
tabId tels que t1 sont également acceptés. Les identifiants cibles CDP bruts et les préfixes uniques
d’identifiants cibles bruts fonctionnent toujours, mais ce sont des identifiants de diagnostic volatils.
Si l’authentification du Gateway par secret partagé est configurée, les routes HTTP du navigateur exigent également une authentification :
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>ou une authentification HTTP Basic avec ce mot de passe
Remarques :
- Cette API autonome du navigateur sur l’interface de bouclage ne consomme pas les en-têtes d’identité d’un proxy de confiance ou de Tailscale Serve.
- Si
gateway.auth.modevautnoneoutrusted-proxy, ces routes du navigateur sur l’interface de bouclage n’héritent pas de ces modes porteurs d’identité ; limitez-les à l’interface de bouclage.
Contrat d’erreur de /act
POST /act utilise une réponse d’erreur structurée pour les échecs de validation au niveau de la route et
les échecs de politique :
{ "error": "<message>", "code": "ACT_*" }Valeurs actuelles de code :
ACT_KIND_REQUIRED(HTTP 400) :kindest absent ou non reconnu.ACT_INVALID_REQUEST(HTTP 400) : la charge utile de l’action a échoué lors de la normalisation ou de 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 niveau supérieur 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.
Les autres échecs d’exécution peuvent toujours renvoyer { "error": "<message>" } sans champ
code.
Exigence relative à Playwright
Certaines fonctionnalités (navigation/action/instantané IA/instantané par rôle, captures d’écran d’éléments, PDF) nécessitent Playwright. Si Playwright n’est pas installé, ces points de terminaison renvoient une erreur 501 explicite.
Ce qui fonctionne encore sans Playwright :
- Instantanés ARIA
- Instantanés d’accessibilité de type rôle (
--interactive,--compact,--depth,--efficient) lorsqu’un WebSocket CDP propre à l’onglet est disponible. Il s’agit d’une solution de repli pour l’inspection et la découverte de références ; Playwright reste le principal moteur d’action. - Captures d’écran de page pour le navigateur
openclawgéré lorsqu’un WebSocket CDP propre à l’onglet est disponible - Captures d’écran de page pour les profils
existing-session/ Chrome MCP - Captures d’écran basées sur des références (
--ref) pourexisting-session, à partir de la sortie d’instantané
Ce qui nécessite toujours Playwright :
navigateact- Les instantanés IA qui dépendent du format d’instantané IA natif de Playwright
- Les captures d’écran d’éléments avec sélecteur CSS (
--element) - L’export PDF complet du navigateur
Les captures d’écran d’éléments refusent également --full-page ; la route renvoie fullPage is not supported for element screenshots.
Si vous voyez Playwright is not available in this gateway build, la version empaquetée du
Gateway ne contient pas la dépendance principale de l’environnement d’exécution du navigateur. Réinstallez ou mettez à jour
OpenClaw, puis redémarrez le Gateway. Pour Docker, installez également les
binaires du navigateur Chromium comme indiqué ci-dessous.
Installation de Playwright dans Docker
Si votre Gateway s’exécute dans Docker, évitez npx playwright (conflits de substitution npm).
Pour les images personnalisées, intégrez Chromium dans l’image :
OPENCLAW_INSTALL_BROWSER=1 ./scripts/docker/setup.shPour une image existante, effectuez plutôt l’installation au moyen de la CLI intégrée :
docker compose run --rm openclaw-cli \ node /app/node_modules/playwright-core/cli.js install chromiumPour conserver 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 conservé au moyen de
OPENCLAW_HOME_VOLUME ou d’un montage lié. OpenClaw détecte automatiquement l’installation persistante de
Chromium sous Linux. Consultez Docker.
Fonctionnement (interne)
Un petit serveur de contrôle sur l’interface de bouclage accepte les requêtes HTTP et se connecte aux navigateurs basés sur Chromium au moyen de CDP. Les actions avancées (clic/saisie/instantané/PDF) passent par Playwright au-dessus de CDP ; lorsque Playwright est absent, seules les opérations qui ne dépendent pas de Playwright sont disponibles. L’agent dispose d’une interface stable tandis que les navigateurs et profils locaux ou distants peuvent être remplacés librement en arrière-plan.
Référence rapide de la CLI
Toutes les commandes acceptent --browser-profile <name> pour cibler un profil particulier et --json pour produire une sortie exploitable par une machine.
Principes de base : état, onglets, ouverture/sélection/fermeture
openclaw browser statusopenclaw browser doctoropenclaw browser doctor --deep # ajoute une sonde d’instantané en directopenclaw browser startopenclaw browser start --headless # lancement ponctuel local géré sans interface graphiqueopenclaw browser stop # efface aussi l’émulation pour les connexions seules/CDP distantsopenclaw browser reset-profile # déplace les données du navigateur du profil vers la corbeilleopenclaw browser tabsopenclaw browser tab # raccourci vers l’onglet actuelopenclaw 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 abcd1234Profils : lister, créer, supprimer
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 researchInspection : capture d’écran, instantané, console, erreurs, requêtes
openclaw browser screenshotopenclaw browser screenshot --full-pageopenclaw browser screenshot --ref 12 # ou --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 5000Actions : navigation, clic, saisie, glisser-déposer, attente, évaluation
openclaw browser navigate https://example.comopenclaw browser resize 1280 720openclaw browser click 12 --double # ou e12 pour les références de rôleopenclaw browser click-coords 120 340 # coordonnées de la fenêtre d’affichageopenclaw 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 stopÉtat : cookies, stockage, mode 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 pour supprimeropenclaw 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"Remarques :
- L’outil
browserdestiné à l’agent exposeaction=download(refetpathobligatoires) etaction=waitfordownload(pathfacultatif). Les deux renvoient l’URL du téléchargement enregistré, le nom de fichier suggéré et le chemin local protégé. L’interception explicite des téléchargements est disponible pour les profils Playwright gérés ; les profils de session existante renvoient une erreur d’opération non prise en charge. - Privilégiez les téléversements atomiques via le sélecteur de fichiers : transmettez le déclencheur
--refavec le téléversement afin qu’OpenClaw l’arme et clique en une seule requête. La commandeuploadavec uniquement des chemins reste prise en charge lorsqu’un déclenchement ultérieur est intentionnel. Utilisez--input-refou--elementpour définir directement un champ de fichier.dialogest un appel d’armement ; exécutez-le avant le clic ou l’appui qui déclenche la boîte de dialogue. Si une action ouvre une fenêtre modale, sa réponse inclutblockedByDialogetbrowserState.dialogs.pending; transmettez cedialogIdpour répondre directement. Les boîtes de dialogue traitées hors d’OpenClaw figurent sousbrowserState.dialogs.recent. click/type/etc. nécessitent unerefprovenant desnapshot(12numérique, référence de rôlee12ou référence ARIA exploitableax12). 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 d’OpenClaw :
/tmp/openclaw{,/downloads}(solution de repli :${os.tmpdir()}/openclaw/...). uploadaccepte les fichiers provenant de la racine temporaire des téléversements d’OpenClaw et les médias entrants gérés par OpenClaw. Un média entrant géré peut être référencé sous la formemedia://inbound/<id>, par le chemin relatif au bac à sablemedia/inbound/<id>ou par un chemin résolu dans le répertoire géré des médias entrants. Les références de 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 également définir directement les champs de fichier via--input-refou--element.
Les identifiants et libellés stables des onglets survivent au remplacement des cibles brutes de Chromium lorsqu’OpenClaw
peut établir l’onglet de remplacement, par exemple avec une paire unique ancien/nouveau pour la même URL ou
lorsqu’un seul ancien onglet devient un seul nouvel onglet après l’envoi d’un formulaire. Les remplacements
ambigus avec des URL en double reçoivent de nouveaux identifiants. Les identifiants de cibles brutes restent
volatils ; privilégiez suggestedTargetId provenant de tabs dans les scripts.
Aperçu des options de capture :
--format ai(valeur par défaut avec Playwright) : capture pour l’IA avec des références numériques (aria-ref="<n>").--format aria: arbre d’accessibilité avec des référencesaxN. Lorsque Playwright est disponible, OpenClaw associe les références à la page active à l’aide des identifiants DOM du moteur afin que les actions suivantes puissent les utiliser ; sinon, considérez la sortie comme uniquement destinée à l’inspection.--efficient(ou--mode efficient) : préréglage compact de capture par rôles. Définissezbrowser.snapshotDefaults.mode: "efficient"pour en faire la valeur par défaut (voir Configuration du Gateway).--interactive,--compact,--depth,--selectorimposent une capture par rôles avec des référencesref=e12.--frame "<iframe>"limite les captures par rôles à un iframe.- Avec Playwright,
--labelsajoute une capture d’écran avec des libellés de référence superposés (afficheMEDIA:<path>) ainsi qu’un tableauannotationscontenant le cadre de délimitation de chaque référence. Avecscreenshot, les libellés fournis par Playwright fonctionnent avec--full-page,--refet--element; avecsnapshot, la capture d’écran associée reste limitée à la fenêtre d’affichage. Les profils de session existante/chrome-mcp affichent les libellés superposés sur les captures d’écran de la page, mais ne renvoient pas d’annotationset 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 avec libellés ne sont pas disponibles. --urlsajoute les destinations des liens découverts aux captures pour l’IA.
Captures et références
OpenClaw prend en charge deux styles de « capture » :
-
Capture pour l’IA (références numériques) :
openclaw browser snapshot(par défaut ;--format ai)- Sortie : une capture textuelle comprenant 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.
-
Capture par rôles (références de rôle comme
e12) :openclaw browser snapshot --interactive(ou--compact,--depth,--selector,--frame)- Sortie : une liste ou une arborescence fondé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(...)(ainsi quenth()pour les doublons). - Ajoutez
--labelspour inclure une capture d’écran avec des libellése12superposés. Sur les profils reposant sur Playwright, cela renvoie également les métadonnées du cadre de délimitation de chaque référence (annotations[]). - Ajoutez
--urlslorsque le texte des liens est ambigu et que l’agent a besoin de cibles de navigation concrètes.
- Sortie : une liste ou une arborescence fondée sur les rôles avec
-
Capture 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 de capture peut associer la référence via Playwright et les identifiants DOM du moteur Chrome.
-
Si Playwright n’est pas disponible, les captures ARIA peuvent néanmoins être utiles pour l’inspection, mais les références peuvent ne pas être exploitables. Effectuez une nouvelle capture 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 captures par rôles incluent les URL des liens, les éléments cliquables promus par le curseur et les métadonnées des iframes.
Comportement des références :
- Les références ne sont pas stables entre les navigations ; en cas d’échec, réexécutez
snapshotet utilisez une nouvelle référence. /actrenvoie letargetIdbrut actuel après un remplacement déclenché par une action lorsqu’il peut établir l’onglet de remplacement. Continuez d’utiliser les identifiants ou libellés stables des onglets pour les commandes suivantes.- Si la capture par rôles a été effectuée avec
--frame, les références de rôle restent limitées à cet iframe jusqu’à la prochaine capture par rôles. - Les références
axNinconnues ou obsolètes échouent immédiatement au lieu de basculer vers le sélecteuraria-refde Playwright. Effectuez une nouvelle capture dans le même onglet lorsque cela se produit.
Options d’attente avancées
Vous pouvez attendre davantage que l’écoulement d’une durée ou l’apparition d’un texte :
- Attendre une URL (les motifs glob sont 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
openclawgérés et CDP bruts/distants. Les profils utilisant le piloteexisting-session(y compris le profiluserpar défaut) refusentnetworkidle; utilisez plutôt les attentes--url,--text, un sélecteur ou--fn.
- Attendre un prédicat JS :
openclaw browser wait --fn "window.ready===true"
- Attendre qu’un sélecteur devienne visible :
openclaw browser wait "#main"
Ces options peuvent être combinées :
openclaw browser wait "#main" \ --url "**/dash" \ --load networkidle \ --fn "window.ready===true" \ --timeout-ms 15000Procédures de débogage
Lorsqu’une action échoue (par exemple « non visible », « violation du mode strict », « recouvert ») :
openclaw browser snapshot --interactive- Utilisez
click <ref>/type <ref>(privilégiez 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 de façon inhabituelle :
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 --json statusopenclaw browser --json snapshot --interactiveopenclaw browser --json requests --filter apiopenclaw browser --json cookiesLes captures par rôles au format JSON incluent refs ainsi qu’un petit bloc stats (lignes/caractères/références/interactifs) afin que les outils puissent évaluer la taille et la densité de la charge utile.
Paramètres d’état et d’environnement
Ces commandes sont utiles dans les procédures visant à « faire en sorte que le site se comporte comme X » :
- Cookies :
cookies,cookies set,cookies clear - Stockage :
storage local|session get|set|clear - Mode hors ligne :
set offline on|off - En-têtes :
set headers --headers-json '{"X-Debug":"1"}'(ou la forme positionnelleset headers '{"X-Debug":"1"}') - Authentification HTTP de base :
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 / paramètres régionaux :
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 authentifiées ; considérez-le comme sensible.
browser act kind=evaluate/openclaw browser evaluateetwait --fnexécutent du code JavaScript arbitraire dans le contexte de la page. Une injection de prompt peut orienter cette exécution. Désactivez-la avecbrowser.evaluateEnabled=falsesi vous n’en avez pas besoin.openclaw browser evaluate --fnaccepte le code source d’une fonction, une expression ou le corps d’une instruction. Les corps d’instructions sont enveloppés dans des fonctions asynchrones ; utilisez doncreturnpour la valeur à renvoyer. Utilisez--timeout-ms <ms>lorsque la fonction exécutée dans la page peut nécessiter plus de temps que le délai d’évaluation par défaut.- Pour les connexions et les remarques sur les mécanismes anti-robots (X/Twitter, etc.), consultez Connexion dans le navigateur et publication sur X/Twitter.
- Gardez l’hôte du Gateway/nœud privé (boucle locale ou tailnet uniquement).
- Les points de terminaison CDP distants sont puissants ; utilisez un tunnel et protégez-les.
Exemple en mode strict (bloque par défaut les destinations privées/internes) :
{ browser: { ssrfPolicy: { dangerouslyAllowPrivateNetwork: false, hostnameAllowlist: ["*.example.com", "example.com"], allowedHostnames: ["localhost"], // autorisation exacte facultative }, },}Pages connexes
- Navigateur - présentation, configuration, profils, sécurité
- Connexion dans le navigateur - connexion aux sites
- Dépannage du navigateur sous Linux
- Dépannage du navigateur sous WSL2