Navigateur (géré par openclaw)
OpenClaw peut exécuter un profil Chrome/Brave/Edge/Chromium dédié que l’agent contrôle. Il est isolé de votre navigateur personnel et géré via un petit service local de contrôle à l’intérieur de Gateway (loopback uniquement). Vue débutant :- Considérez-le comme un navigateur distinct, réservé à l’agent.
- Le profil
openclawne touche pas au profil de votre navigateur personnel. - L’agent peut ouvrir des onglets, lire des pages, cliquer et saisir du texte dans une voie sûre.
- Le profil intégré
userse rattache à votre véritable session Chrome connectée via Chrome MCP.
Ce que vous obtenez
- Un profil de navigateur distinct nommé openclaw (accent orange par défaut).
- Un contrôle déterministe des onglets (lister/ouvrir/focaliser/fermer).
- Actions de l’agent (cliquer/saisir/glisser/sélectionner), instantanés, captures d’écran, PDF.
- Prise en charge facultative de plusieurs profils (
openclaw,work,remote, …).
Démarrage rapide
openclaw browser est totalement absent, ou si l’agent indique que l’outil de navigateur
n’est pas disponible, passez à Commande ou outil navigateur manquant.
Contrôle du Plugin
L’outilbrowser par défaut est maintenant un Plugin groupé livré activé par
défaut. Cela signifie que vous pouvez le désactiver ou le remplacer sans retirer le reste du
système de Plugin d’OpenClaw :
browser. L’expérience de navigateur par défaut nécessite les deux éléments suivants :
plugins.entries.browser.enablednon désactivébrowser.enabled=true
openclaw browser),
la méthode Gateway (browser.request), l’outil de l’agent et le service de contrôle
du navigateur par défaut disparaissent tous ensemble. Votre configuration browser.* reste intacte pour
qu’un Plugin de remplacement puisse la réutiliser.
Le Plugin de navigateur groupé est aussi désormais propriétaire de l’implémentation d’exécution du navigateur.
Le cœur ne conserve que les helpers partagés du Plugin SDK ainsi que des réexportations de compatibilité pour
les anciens chemins d’import internes. En pratique, retirer ou remplacer le package du Plugin de navigateur
supprime l’ensemble des fonctionnalités navigateur au lieu de laisser derrière lui une seconde exécution
gérée par le cœur.
Les changements de configuration du navigateur nécessitent toujours un redémarrage de Gateway afin que le Plugin groupé
puisse réenregistrer son service de navigateur avec les nouveaux paramètres.
Commande ou outil navigateur manquant
Siopenclaw browser devient soudainement une commande inconnue après une mise à niveau, ou
si l’agent signale que l’outil navigateur est manquant, la cause la plus fréquente est une liste
plugins.allow restrictive qui n’inclut pas browser.
Exemple de configuration cassée :
browser à la liste d’autorisation des plugins :
browser.enabled=truene suffit pas à lui seul lorsqueplugins.allowest défini.plugins.entries.browser.enabled=truene suffit pas non plus à lui seul lorsqueplugins.allowest défini.tools.alsoAllow: ["browser"]ne charge pas le Plugin de navigateur groupé. Cela ajuste seulement la politique des outils une fois le Plugin déjà chargé.- Si vous n’avez pas besoin d’une liste d’autorisation de plugins restrictive, supprimer
plugins.allowrétablit aussi le comportement groupé par défaut du navigateur.
openclaw browserest une commande inconnue.browser.requestest absent.- L’agent signale que l’outil navigateur est indisponible ou manquant.
Profils : openclaw vs user
openclaw: navigateur géré et isolé (aucune extension requise).user: profil intégré de rattachement Chrome MCP pour votre véritable session Chrome connectée.
- Par défaut : utilisez le navigateur isolé
openclaw. - Préférez
profile="user"lorsque les sessions déjà connectées sont importantes et que l’utilisateur est à l’ordinateur pour cliquer/approuver toute invite de rattachement. profileest la dérogation explicite lorsque vous souhaitez un mode de navigateur précis.
browser.defaultProfile: "openclaw" si vous voulez le mode géré par défaut.
Configuration
Les paramètres du navigateur se trouvent dans~/.openclaw/openclaw.json.
- Le service de contrôle du navigateur se lie à loopback sur un port dérivé de
gateway.port(par défaut :18791, soit gateway + 2). - Si vous redéfinissez le port Gateway (
gateway.portouOPENCLAW_GATEWAY_PORT), les ports de navigateur dérivés se décalent pour rester dans la même « famille ». cdpUrlutilise par défaut le port CDP local géré lorsqu’il n’est pas défini.remoteCdpTimeoutMss’applique aux vérifications de joignabilité CDP distantes (hors loopback).remoteCdpHandshakeTimeoutMss’applique aux vérifications de joignabilité de handshake WebSocket CDP distantes.- La navigation du navigateur et l’ouverture d’onglet sont protégées contre la SSRF avant la navigation et revérifiées au mieux sur l’URL finale
http(s)après navigation. - En mode SSRF strict, la découverte et les sondes des points de terminaison CDP distants (
cdpUrl, y compris les recherches/json/version) sont aussi vérifiées. browser.ssrfPolicy.dangerouslyAllowPrivateNetworkest désactivé par défaut. Définissez-le surtrueuniquement lorsque vous faites délibérément confiance à l’accès navigateur sur réseau privé.browser.ssrfPolicy.allowPrivateNetworkreste pris en charge comme alias hérité pour compatibilité.attachOnly: truesignifie « ne jamais lancer un navigateur local ; s’y rattacher uniquement s’il est déjà en cours d’exécution ».color+ lacolorpar profil teintent l’interface du navigateur afin que vous puissiez voir quel profil est actif.- Le profil par défaut est
openclaw(navigateur autonome géré par OpenClaw). UtilisezdefaultProfile: "user"pour choisir le navigateur connecté de l’utilisateur. - Ordre d’auto-détection : navigateur système par défaut s’il est basé sur Chromium ; sinon Chrome → Brave → Edge → Chromium → Chrome Canary.
- Les profils
openclawlocaux attribuent automatiquementcdpPort/cdpUrl— définissez-les uniquement pour CDP distant. driver: "existing-session"utilise Chrome DevTools MCP au lieu de CDP brut. Ne définissez pascdpUrlpour ce driver.- Définissez
browser.profiles.<name>.userDataDirlorsqu’un profil existing-session doit se rattacher à un profil utilisateur Chromium non par défaut, comme Brave ou Edge.
Utiliser Brave (ou un autre navigateur basé sur Chromium)
Si votre navigateur système par défaut est basé sur Chromium (Chrome/Brave/Edge/etc), OpenClaw l’utilise automatiquement. Définissezbrowser.executablePath pour redéfinir
l’auto-détection :
Exemple CLI :
Contrôle local vs distant
- Contrôle local (par défaut) : Gateway démarre le service de contrôle loopback et peut lancer un navigateur local.
- Contrôle distant (hôte node) : exécutez un hôte node sur la machine qui possède le navigateur ; Gateway y relaie les actions du navigateur.
- CDP distant : définissez
browser.profiles.<name>.cdpUrl(oubrowser.cdpUrl) pour vous rattacher à un navigateur distant basé sur Chromium. Dans ce cas, OpenClaw ne lancera pas de navigateur local.
- profils gérés locaux :
openclaw browser stoparrête le processus de navigateur que OpenClaw a lancé - profils attach-only et CDP distants :
openclaw browser stopferme la session de contrôle active et libère les dérogations d’émulation Playwright/CDP (viewport, schéma de couleurs, locale, fuseau horaire, mode hors ligne et états similaires), même si aucun processus de navigateur n’a été lancé par OpenClaw
- Jetons de requête (par ex.
https://provider.example?token=<token>) - Authentification HTTP Basic (par ex.
https://user:pass@provider.example)
/json/* et lors de la connexion
au WebSocket CDP. Préférez les variables d’environnement ou les gestionnaires de secrets pour les
jetons au lieu de les versionner dans les fichiers de configuration.
Proxy de navigateur node (valeur par défaut sans configuration)
Si vous exécutez un hôte node sur la machine qui possède votre navigateur, OpenClaw peut rediriger automatiquement les appels à l’outil navigateur vers ce node sans configuration de navigateur supplémentaire. C’est le chemin par défaut pour les Gateway distants. Notes :- L’hôte node expose son serveur local de contrôle du navigateur via une commande proxy.
- Les profils proviennent de la propre configuration
browser.profilesdu node (comme en local). nodeHost.browserProxy.allowProfilesest facultatif. Laissez-le vide pour le comportement hérité/par défaut : tous les profils configurés restent accessibles via le proxy, y compris les routes de création/suppression de profils.- Si vous définissez
nodeHost.browserProxy.allowProfiles, OpenClaw le traite comme une frontière de moindre privilège : seuls les profils autorisés peuvent être ciblés, et les routes persistantes de création/suppression de profils sont bloquées sur la surface du proxy. - Désactivez-le si vous ne le voulez pas :
- Sur le node :
nodeHost.browserProxy.enabled=false - Sur la gateway :
gateway.nodes.browser.mode="off"
- Sur le node :
Browserless (CDP distant hébergé)
Browserless est un service Chromium hébergé qui expose des URL de connexion CDP en HTTPS et WebSocket. OpenClaw peut utiliser l’une ou l’autre forme, mais pour un profil de navigateur distant, l’option la plus simple est l’URL WebSocket directe figurant dans la documentation de connexion de Browserless. Exemple :- Remplacez
<BROWSERLESS_API_KEY>par votre véritable jeton Browserless. - Choisissez le point de terminaison régional correspondant à votre compte Browserless (voir leur documentation).
- Si Browserless vous fournit une URL de base HTTPS, vous pouvez soit la convertir en
wss://pour une connexion CDP directe, soit conserver l’URL HTTPS et laisser OpenClaw découvrir/json/version.
Fournisseurs CDP WebSocket directs
Certains services de navigateur hébergés exposent un point de terminaison WebSocket direct plutôt que la découverte CDP standard basée sur HTTP (/json/version). OpenClaw accepte trois formes
d’URL CDP et choisit automatiquement la bonne stratégie de connexion :
- Découverte HTTP(S) —
http://host[:port]ouhttps://host[:port]. OpenClaw appelle/json/versionpour découvrir l’URL WebSocket du débogueur, puis se connecte. Aucun repli WebSocket. - Points de terminaison WebSocket directs —
ws://host[:port]/devtools/<kind>/<id>ouwss://...avec un chemin/devtools/browser|page|worker|shared_worker|service_worker/<id>. OpenClaw se connecte directement via un handshake WebSocket et ignore entièrement/json/version. - Racines WebSocket nues —
ws://host[:port]ouwss://host[:port]sans chemin/devtools/...(par ex. Browserless, Browserbase). OpenClaw tente d’abord une découverte HTTP/json/version(en normalisant le schéma enhttp/https) ; si la découverte renvoie unwebSocketDebuggerUrl, il est utilisé, sinon OpenClaw se replie sur un handshake WebSocket direct à la racine nue. Cela couvre à la fois les ports de débogage distant de type Chrome et les fournisseurs uniquement WebSocket.
ws://host:port / wss://host:port sans chemin /devtools/...
pointant vers une instance locale de Chrome est pris en charge via le repli
avec découverte d’abord — Chrome n’accepte les upgrades WebSocket que sur le chemin spécifique
par navigateur ou par cible renvoyé par /json/version, donc un simple handshake à la racine
échouerait.
Browserbase
Browserbase est une plateforme cloud permettant d’exécuter des navigateurs headless avec résolution CAPTCHA intégrée, mode furtif et proxys résidentiels.- Inscrivez-vous et copiez votre clé API depuis le tableau de bord Overview.
- Remplacez
<BROWSERBASE_API_KEY>par votre véritable clé API Browserbase. - Browserbase crée automatiquement une session de navigateur lors de la connexion WebSocket, donc aucune étape manuelle de création de session n’est nécessaire.
- L’offre gratuite autorise une session concurrente et une heure de navigateur par mois. Consultez les tarifs pour les limites des offres payantes.
- Consultez la documentation Browserbase pour la référence API complète, les guides SDK et des exemples d’intégration.
Sécurité
Idées clés :- Le contrôle du navigateur est limité au loopback ; l’accès passe par l’authentification Gateway ou l’appairage node.
- L’API HTTP autonome du navigateur en loopback utilise uniquement une authentification par secret partagé :
authentification bearer par jeton Gateway,
x-openclaw-password, ou authentification HTTP Basic avec le mot de passe Gateway configuré. - Les en-têtes d’identité Tailscale Serve et
gateway.auth.mode: "trusted-proxy"n’authentifient pas cette API autonome du navigateur en loopback. - Si le contrôle du navigateur est activé et qu’aucune authentification par secret partagé n’est configurée, OpenClaw
génère automatiquement
gateway.auth.tokenau démarrage et le persiste dans la configuration. - OpenClaw ne génère pas automatiquement ce jeton lorsque
gateway.auth.modeest déjàpassword,noneoutrusted-proxy. - Conservez Gateway et tout hôte node sur un réseau privé (Tailscale) ; évitez toute exposition publique.
- Traitez les URL/jetons CDP distants comme des secrets ; préférez les variables d’environnement ou un gestionnaire de secrets.
- Préférez des points de terminaison chiffrés (HTTPS ou WSS) et des jetons de courte durée quand c’est possible.
- Évitez d’intégrer directement des jetons de longue durée dans les fichiers de configuration.
Profils (multi-navigateur)
OpenClaw prend en charge plusieurs profils nommés (configurations de routage). Les profils peuvent être :- gérés par openclaw : une instance de navigateur dédiée basée sur Chromium avec son propre répertoire de données utilisateur + port CDP
- distant : une URL CDP explicite (navigateur basé sur Chromium exécuté ailleurs)
- session existante : votre profil Chrome existant via l’auto-connexion Chrome DevTools MCP
- Le profil
openclawest créé automatiquement s’il manque. - Le profil
userest intégré pour le rattachement à une session existante via Chrome MCP. - Les profils de session existante sont facultatifs au-delà de
user; créez-les avec--driver existing-session. - Les ports CDP locaux sont alloués par défaut dans la plage 18800–18899.
- La suppression d’un profil déplace son répertoire de données local vers la corbeille.
?profile=<name> ; la CLI utilise --browser-profile.
Session existante via Chrome DevTools MCP
OpenClaw peut aussi se rattacher à un profil de navigateur déjà en cours d’exécution basé sur Chromium via le serveur officiel Chrome DevTools MCP. Cela réutilise les onglets et l’état de connexion déjà ouverts dans ce profil de navigateur. Références officielles pour le contexte et l’installation : Profil intégré :user
- Le profil intégré
userutilise l’auto-connexion Chrome MCP, qui cible le profil Google Chrome local par défaut.
userDataDir pour Brave, Edge, Chromium ou un profil Chrome non par défaut :
- Ouvrez la page d’inspection de ce navigateur pour le débogage distant.
- Activez le débogage distant.
- Gardez le navigateur en cours d’exécution et approuvez l’invite de connexion lorsque OpenClaw s’y rattache.
- Chrome :
chrome://inspect/#remote-debugging - Brave :
brave://inspect/#remote-debugging - Edge :
edge://inspect/#remote-debugging
statusaffichedriver: existing-sessionstatusaffichetransport: chrome-mcpstatusafficherunning: truetabsliste les onglets déjà ouverts dans votre navigateursnapshotrenvoie des références depuis l’onglet live sélectionné
- le navigateur cible basé sur Chromium est en version
144+ - le débogage distant est activé dans la page d’inspection de ce navigateur
- le navigateur a affiché l’invite de consentement au rattachement et vous l’avez acceptée
openclaw doctormigre l’ancienne configuration de navigateur basée sur une extension et vérifie que Chrome est installé localement pour les profils d’auto-connexion par défaut, mais il ne peut pas activer pour vous le débogage distant côté navigateur
- Utilisez
profile="user"lorsque vous avez besoin de l’état connecté du navigateur de l’utilisateur. - Si vous utilisez un profil de session existante personnalisé, transmettez ce nom de profil explicite.
- Choisissez ce mode uniquement lorsque l’utilisateur est à l’ordinateur pour approuver l’invite de rattachement.
- Gateway ou l’hôte node peut lancer
npx chrome-devtools-mcp@latest --autoConnect
- Ce chemin est plus risqué que le profil isolé
openclawcar il peut agir dans votre session de navigateur connectée. - OpenClaw ne lance pas le navigateur pour ce driver ; il se rattache uniquement à une session existante.
- OpenClaw utilise ici le flux officiel
--autoConnectde Chrome DevTools MCP. SiuserDataDirest défini, OpenClaw le transmet pour cibler explicitement ce répertoire de données utilisateur Chromium. - Les captures d’écran en session existante prennent en charge les captures de page et les captures d’élément
--refdepuis les instantanés, mais pas les sélecteurs CSS--element. - Les captures d’écran de page en session existante fonctionnent sans Playwright via Chrome MCP.
Les captures d’élément basées sur une référence (
--ref) y fonctionnent aussi, mais--full-pagene peut pas être combiné avec--refou--element. - Les actions en session existante restent plus limitées que dans le
chemin du navigateur géré :
click,type,hover,scrollIntoView,dragetselectexigent des références d’instantané au lieu de sélecteurs CSSclickfonctionne uniquement avec le bouton gauche (pas de redéfinition de bouton ni de modificateurs)typene prend pas en chargeslowly=true; utilisezfilloupresspressne prend pas en chargedelayMshover,scrollIntoView,drag,select,filletevaluatene prennent pas en charge les redéfinitions de délai d’attente par appelselectne prend actuellement en charge qu’une seule valeur
wait --urlen session existante prend en charge les motifs exacts, sous-chaîne et glob comme les autres drivers de navigateur.wait --load networkidlen’est pas encore pris en charge.- Les hooks d’upload en session existante exigent
refouinputRef, prennent en charge un seul fichier à la fois et ne prennent pas en charge le ciblage CSSelement. - Les hooks de boîte de dialogue en session existante ne prennent pas en charge les redéfinitions de délai d’attente.
- Certaines fonctionnalités exigent encore le chemin du navigateur géré, notamment les actions par lot,
l’export PDF, l’interception des téléchargements et
responsebody. - La session existante peut se rattacher sur l’hôte sélectionné ou via un node de navigateur connecté. Si Chrome se trouve ailleurs et qu’aucun node de navigateur n’est connecté, utilisez plutôt CDP distant ou un hôte node.
Garanties d’isolation
- Répertoire de données utilisateur dédié : ne touche jamais au profil de votre navigateur personnel.
- Ports dédiés : évite
9222pour prévenir les collisions avec les flux de développement. - Contrôle déterministe des onglets : cible les onglets par
targetId, et non par « dernier onglet ».
Sélection du navigateur
Lors d’un lancement local, OpenClaw choisit le premier disponible :- Chrome
- Brave
- Edge
- Chromium
- Chrome Canary
browser.executablePath.
Plateformes :
- macOS : vérifie
/Applicationset~/Applications. - Linux : recherche
google-chrome,brave,microsoft-edge,chromium, etc. - Windows : vérifie les emplacements d’installation courants.
API de contrôle (facultative)
Pour les intégrations locales uniquement, Gateway expose une petite API HTTP loopback :- Statut/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 - 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
?profile=<name>.
Si une authentification Gateway par secret partagé est configurée, les routes HTTP du navigateur exigent aussi une authentification :
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>ou authentification HTTP Basic avec ce mot de passe
- Cette API autonome du navigateur en loopback ne consomme pas les en-têtes d’identité trusted-proxy ou Tailscale Serve.
- Si
gateway.auth.modevautnoneoutrusted-proxy, ces routes navigateur en loopback n’héritent pas de ces modes porteurs d’identité ; gardez-les limitées au loopback.
Contrat d’erreur /act
POST /act utilise une réponse d’erreur structurée pour les échecs de validation au niveau de la route et
de politique :
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 niveau supérieur ou en lot 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.
{ "error": "<message>" } sans
champ code.
Exigence Playwright
Certaines fonctionnalités (navigate/act/instantané AI/instantané de rôle, captures d’écran d’élément,
PDF) exigent Playwright. Si Playwright n’est pas installé, ces points de terminaison renvoient
une erreur 501 claire.
Ce qui fonctionne encore sans Playwright :
- instantanés ARIA
- captures d’écran de page pour le navigateur géré
openclawlorsqu’un WebSocket CDP par onglet est disponible - captures d’écran de page pour les profils
existing-session/ Chrome MCP - captures d’écran basées sur une référence
existing-session(--ref) à partir de la sortie d’instantané
navigateact- instantanés AI / instantanés de rôle
- captures d’écran d’élément par sélecteur CSS (
--element) - export PDF complet du navigateur
--full-page ; la route renvoie fullPage is not supported for element screenshots.
Si vous voyez Playwright is not available in this gateway build, installez le package complet
Playwright (pas playwright-core) et redémarrez la gateway, ou réinstallez
OpenClaw avec la prise en charge du navigateur.
Installation de Playwright dans Docker
Si votre Gateway s’exécute dans Docker, éviteznpx playwright (conflits d’override npm).
Utilisez plutôt la CLI groupée :
PLAYWRIGHT_BROWSERS_PATH (par exemple,
/home/node/.cache/ms-playwright) et assurez-vous que /home/node est persistant via
OPENCLAW_HOME_VOLUME ou un montage bind. Voir Docker.
Fonctionnement (interne)
Flux de haut niveau :- Un petit serveur de contrôle accepte les requêtes HTTP.
- Il se connecte aux navigateurs basés sur Chromium (Chrome/Brave/Edge/Chromium) via CDP.
- Pour les actions avancées (clic/saisie/instantané/PDF), il utilise Playwright par-dessus CDP.
- Lorsque Playwright est absent, seules les opérations sans Playwright sont disponibles.
Référence rapide CLI
Toutes les commandes acceptent--browser-profile <name> pour cibler un profil précis.
Toutes les commandes acceptent aussi --json pour une sortie lisible par machine (charges utiles stables).
Bases :
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 error
- Pour les profils attach-only et CDP distants,
openclaw browser stopreste la bonne commande de nettoyage après les tests. Elle ferme la session de contrôle active et efface les redéfinitions temporaires d’émulation au lieu de tuer le navigateur sous-jacent. openclaw 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 report.pdfopenclaw browser waitfordownload report.pdfopenclaw browser upload /tmp/openclaw/uploads/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 --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"
uploadetdialogsont des appels d’armement ; exécutez-les avant le clic/la pression qui déclenche le sélecteur/la boîte de dialogue.- Les chemins de sortie de téléchargement et de trace sont limités aux racines temporaires OpenClaw :
- traces :
/tmp/openclaw(repli :${os.tmpdir()}/openclaw) - téléchargements :
/tmp/openclaw/downloads(repli :${os.tmpdir()}/openclaw/downloads)
- traces :
- Les chemins d’upload sont limités à une racine temporaire d’uploads OpenClaw :
- uploads :
/tmp/openclaw/uploads(repli :${os.tmpdir()}/openclaw/uploads)
- uploads :
uploadpeut aussi définir directement des entrées de fichier via--input-refou--element.snapshot:--format ai(par défaut quand Playwright est installé) : renvoie un instantané AI avec des références numériques (aria-ref="<n>").--format aria: renvoie l’arbre d’accessibilité (sans références ; inspection uniquement).--efficient(ou--mode efficient) : préréglage compact d’instantané de rôle (interactive + compact + depth + maxChars plus faible).- Valeur par défaut de configuration (outil/CLI uniquement) : définissez
browser.snapshotDefaults.mode: "efficient"pour utiliser des instantanés efficaces lorsque l’appelant ne passe pas de mode (voir Configuration Gateway). - Les options d’instantané de rôle (
--interactive,--compact,--depth,--selector) forcent un instantané basé sur les rôles avec des références commeref=e12. --frame "<iframe selector>"limite les instantanés de rôle à une iframe (s’associe à des références de rôle commee12).--interactiveproduit une liste plate et facile à sélectionner des éléments interactifs (idéal pour piloter des actions).--labelsajoute une capture d’écran du viewport uniquement avec des étiquettes de référence superposées (afficheMEDIA:<path>).
click/type/etc exigent unerefissue desnapshot(soit une référence numérique12, soit une référence de rôlee12). Les sélecteurs CSS ne sont volontairement pas pris en charge pour les actions.
Instantanés et références
OpenClaw prend en charge deux styles d’« instantané » :-
Instantané AI (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 le
aria-refde Playwright.
-
Instantané de rôle (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 du viewport avec des étiquettese12superposées.
- Sortie : une liste/arborescence basée sur les rôles avec
- Les références ne sont pas stables entre les navigations ; si quelque chose échoue, réexécutez
snapshotet utilisez une nouvelle référence. - Si l’instantané de rôle a été pris avec
--frame, les références de rôle sont limitées à cette iframe jusqu’au prochain instantané de rôle.
Améliorations de wait
Vous pouvez attendre plus que le simple temps/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
- Attendre un prédicat JS :
openclaw browser wait --fn "window.ready===true"
- Attendre qu’un sélecteur devienne visible :
openclaw browser wait "#main"
Flux de débogage
Lorsqu’une action échoue (par ex. « not visible », « strict mode violation », « covered ») :openclaw browser snapshot --interactive- Utilisez
click <ref>/type <ref>(préférez les références de rôle en mode interactif) - Si cela échoue encore :
openclaw browser highlight <ref>pour voir ce que Playwright cible - Si la page se comporte bizarrement :
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é au scripting et aux outils structurés.
Exemples :
refs plus un petit bloc stats (lignes/caractères/références/éléments interactifs) afin que les outils puissent raisonner sur la taille et la densité de la charge utile.
Réglages d’état et d’environnement
Ils sont utiles pour les flux « 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 Basic :
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 / langue :
set timezone ...,set locale ... - Appareil / viewport :
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. L’injection de prompt peut orienter cela. Désactivez-le avecbrowser.evaluateEnabled=falsesi vous n’en avez pas besoin.- Pour les connexions et les notes anti-bot (X/Twitter, etc.), voir Connexion navigateur + publication X/Twitter.
- Conservez la Gateway/l’hôte node privés (loopback ou tailnet uniquement).
- Les points de terminaison CDP distants sont puissants ; tunnelisez-les et protégez-les.
Dépannage
Pour les problèmes spécifiques à Linux (en particulier Chromium snap), voir Dépannage du navigateur. Pour les configurations hôte scindé WSL2 Gateway + Chrome Windows, voir Dépannage WSL2 + Windows + Chrome distant CDP.Échec de démarrage CDP vs blocage SSRF de navigation
Il s’agit de deux classes d’échec différentes, et elles renvoient à des chemins de code différents.- Échec de démarrage ou de disponibilité CDP signifie qu’OpenClaw ne peut pas confirmer que le plan de contrôle du navigateur est sain.
- Blocage SSRF de navigation signifie que le plan de contrôle du navigateur est sain, mais qu’une cible de navigation de page est rejetée par la politique.
- Échec de démarrage ou de disponibilité CDP :
Chrome CDP websocket for profile "openclaw" is not reachable after startRemote CDP for profile "<name>" is not reachable at <cdpUrl>
- Blocage SSRF de navigation :
- les flux
open,navigate,snapshotou d’ouverture d’onglet échouent avec une erreur de politique navigateur/réseau alors questartettabsfonctionnent encore
- les flux
- Si
startéchoue avecnot reachable after start, commencez par dépanner la disponibilité CDP. - Si
startréussit mais quetabséchoue, le plan de contrôle est toujours malsain. Traitez cela comme un problème de joignabilité CDP, et non comme un problème de navigation de page. - Si
startettabsréussissent mais queopenounavigateéchoue, le plan de contrôle du navigateur fonctionne et l’échec se situe dans la politique de navigation ou la page cible. - Si
start,tabsetopenréussissent tous, le chemin de contrôle de base du navigateur géré est sain.
- La configuration du navigateur utilise par défaut un objet de politique SSRF en échec fermé même lorsque vous ne configurez pas
browser.ssrfPolicy. - Pour le profil géré local loopback
openclaw, les vérifications d’état CDP ignorent volontairement l’application de la politique de joignabilité SSRF du navigateur pour le propre plan de contrôle local d’OpenClaw. - La protection de navigation est distincte. Un résultat réussi de
startoutabsne signifie pas qu’une cible ultérieure deopenounavigateest autorisée.
- N’assouplissez pas la politique SSRF du navigateur par défaut.
- Préférez des exceptions d’hôte étroites comme
hostnameAllowlistouallowedHostnamesà un accès large au réseau privé. - Utilisez
dangerouslyAllowPrivateNetwork: trueuniquement dans des environnements explicitement approuvés où l’accès navigateur au réseau privé est nécessaire et a été examiné.
startréussittabsréussitopen http://internal.exampleéchoue
startéchoue avecnot reachable after starttabséchoue également ou ne peut pas s’exécuter
Outils de l’agent + fonctionnement du contrôle
L’agent reçoit un outil pour l’automatisation du navigateur :browser— status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
browser snapshotrenvoie un arbre d’interface stable (AI ou ARIA).browser actutilise les IDrefde l’instantané pour cliquer/saisir/glisser/sélectionner.browser screenshotcapture les pixels (page entière ou élément).browseraccepte :profilepour choisir un profil de navigateur nommé (openclaw, chrome ou CDP distant).target(sandbox|host|node) pour sélectionner l’emplacement du navigateur.- Dans les sessions sandboxées,
target: "host"exigeagents.defaults.sandbox.browser.allowHostControl=true. - Si
targetest omis : les sessions sandboxées utilisent par défautsandbox, les sessions non sandboxées utilisent par défauthost. - Si un node capable de gérer le navigateur est connecté, l’outil peut automatiquement s’y router sauf si vous fixez
target="host"outarget="node".
Liens associés
- Vue d’ensemble des outils — tous les outils d’agent disponibles
- Sandboxing — contrôle du navigateur dans les environnements sandboxés
- Security — risques et durcissement du contrôle du navigateur