Chromium accessible via une URL
Chromium headless ou visible, contrôlable via une API HTTP plate. Mode furtif activé par défaut, URL WebSocket CDP retournée sur /start — pointez-y Puppeteer, Playwright ou n'importe quel client CDP.
# Lancer un Chromium furtif avec une empreinte
$ curl "/start?browser_id=main&stealth=true&timezoneId=America/New_York&locale=en-US"
[ "browser_id": "main",
"webSocketDebuggerUrl": "ws://.../devtools/browser/...",
"stealth": true ]
# Naviguer — ou passer l'URL WebSocket à Puppeteer
$ curl "/browse?browser_id=main&url=https://hoody.com"
200 OK
# Capturer ; fonctionne déjà avec votre client CDP existant
$ curl "/screenshot?browser_id=main&format=png" -o shot.png
1920x1080 PNG
Pilotez, observez et inspectez un vrai navigateur via HTTP
Chaque instance Browser expose les mêmes primitives sur lesquelles Puppeteer et Playwright s'appuient — navigation, éval DOM, captures d'écran, DevTools Protocol — mais comme des endpoints HTTP plats. Choisissez un onglet ci-dessous pour voir quel endpoint s'exécute sous le capot.
Démarrer une instance, pointer sur une URL
GET /start lance un Chromium furtif avec votre empreinte. GET /browse?url=… charge une page. Un seul aller-retour HTTP, aucun pilote à installer, aucune image Docker à maintenir.
Évaluer du JS dans la page, retourner des données structurées
POST /eval exécute du JavaScript arbitraire dans le contexte de la page. GET /html et GET /text retournent le DOM rendu et le texte visible. Aucune bibliothèque de sélecteurs, aucun SDK headless-browser.
Capture d'écran ou PDF de la page actuelle
GET /screenshot retourne du PNG, JPEG ou base64 — page entière ou viewport. GET /pdf génère un rendu A4/Letter avec orientation paysage et marges. Le binaire est retourné directement ; pas de flags headless-Chrome à gérer.
Récupérer les URLs CDP, les passer à n'importe quel client
GET /devtools-url retourne trois URLs : le WebSocket CDP (pour Puppeteer / Playwright / tout client CDP), l'API HTTP DevTools et l'interface DevTools. Ouvrez l'URL frontend dans un onglet du navigateur pour observer ce que voit l'instance headless.
Capture d'écran → décision → clic, en boucle
La forme que tout modèle Computer-Use attend : une capture d'écran, un snapshot DOM, un moyen de cliquer à (x, y). Browser expose ces éléments via HTTP simple — intégrez-le à Claude Computer Use, à l'Operator d'OpenAI ou à votre propre agent.
docker run chromium + fonts + fingerprint patches
curl /start?stealth=true → prêt
Démarrer, piloter et arrêter Chromium via HTTP
Chaque endpoint retourne du JSON déterministe ou du binaire. Pas de scraping de stderr, pas de fichiers /tmp, pas de conditions de course avec un sous-processus qui oublie de vider son buffer.
# Full Browser flow — start, navigate, extract, shutdown
URL="https://proj-dev-browser-1.hoody.com"
ID="main"
# 1. Spawn a stealth Chromium
curl -s "$URL/start?browser_id=$ID&stealth=true"
# 2. Navigate
curl -s "$URL/browse?browser_id=$ID&url=https://hoody.com"
# 3. Extract structured data
curl -s -X POST "$URL/eval?browser_id=$ID" \
-H 'Content-Type: application/json' \
-d '["script":"document.title"]'
# > "Example Domain"
# 4. Release the slot
curl -s "$URL/shutdown?browser_id=$ID"
// Full Browser flow — start, navigate, extract, shutdown
const BASE = 'https://proj-dev-browser-1.hoody.com';
const id = 'main';
// 1. Spawn a stealth Chromium
const start = await fetch(`$[BASE]/start?browser_id=$[id]&stealth=true`);
const [ webSocketDebuggerUrl ] = await start.json();
// 2. Navigate
await fetch(`$[BASE]/browse?browser_id=$[id]&url=https://hoody.com`);
// 3. Extract structured data
const r = await fetch(`$[BASE]/eval?browser_id=$[id]`, [
method: 'POST',
headers: [ 'Content-Type': 'application/json' ],
body: JSON.stringify([ script: 'document.title' ])
]);
const title = await r.json();
// => "Example Domain"
// 4. Release the slot
await fetch(`$[BASE]/shutdown?browser_id=$[id]`);
# Full Browser flow — start, navigate, extract, shutdown
import requests
BASE = 'https://proj-dev-browser-1.hoody.com'
id = 'main'
# 1. Spawn a stealth Chromium
start = requests.get(f'[BASE]/start', params=['browser_id': id, 'stealth': 'true'])
ws = start.json()['webSocketDebuggerUrl']
# 2. Navigate
requests.get(f'[BASE]/browse', params=['browser_id': id, 'url': 'https://hoody.com'])
# 3. Extract structured data
r = requests.post(f'[BASE]/eval',
params=['browser_id': id],
json=['script': 'document.title'])
title = r.json()
# => "Example Domain"
# 4. Release the slot
requests.get(f'[BASE]/shutdown', params=['browser_id': id])
Où les équipes déploient Browser
Une couche HTTP plate sur Chromium ouvre des points d'intégration qu'un navigateur headless installé localement ne peut pas couvrir. Six configurations de déploiement les plus courantes.
Pipelines de données
Intégrez du HTML rendu et du JSON dans votre entrepôt de données. Planifiez les appels /eval, transmettez les résultats dans Snowflake, BigQuery ou Postgres. Pas d'installation Chromium par worker, pas de dérive de version dans votre cluster.
Frameworks d'agents
Intégrez-vous à Claude Computer Use, OpenAI Operator ou aux outils de navigation LangChain. Capture d'écran + eval est exactement la forme attendue — Browser est un endpoint HTTP prêt à l'emploi pour n'importe quel runtime d'agent.
Workflows authentifiés
Pilotez des tableaux de bord connectés — panneaux d'administration SaaS, portails bancaires, outils internes. POST /cookies persiste la session, de sorte que les appels suivants maintiennent l'identité sans se ré-authentifier à chaque exécution.
Applications de révision
Aperçus de navigateur par PR. Votre CI lance une instance Browser sur le build en staging, retourne le lien frontend /devtools-url dans le commentaire de PR, les reviewers cliquent une fois et voient l'application en direct.
Surveillance planifiée
Captures /screenshot et /network déclenchées par cron dans les tableaux de bord d'uptime, SLO et performance. Buffer circulaire des 500 dernières entrées console et réseau pour chaque sonde — détectez les régressions avant les utilisateurs.
Captures de conformité
Captures horodatées et verrouillées par empreinte d'une page tierce pour les workflows juridiques, d'audit ou de preuve. Épinglez le canal Chromium, le viewport, la géolocalisation — reproduisez le rendu exact des mois plus tard.
23 opérations, 4 groupes d'endpoints
Chaque capacité de Browser est un appel HTTP plat. Les variantes de méthode sur le même chemin sont listées séparément car elles se comportent différemment — GET /eval exécute un script ponctuel, POST /eval accepte un corps complet.
Interaction
[count, plural, one [# endpoint] other [# endpoints]]'curl -X POST /eval -d '["script":"document.title"]' → "Example"
État de session
[count, plural, one [# endpoint] other [# endpoints]]'curl -X POST /cookies -d '[[name,value,domain,...]]' → [ added: 4 ]
Introspection
[count, plural, one [# endpoint] other [# endpoints]]'curl /devtools-url?browser_id=main → [ ws, http, frontend ]
Cycle de vie
[count, plural, one [# endpoint] other [# endpoints]]'curl /start?browser_id=main&stealth=true → [ ws, stealth: true ]
Plus GET /health et GET /metrics hérités de la plateforme sur chaque service Hoody Kit.
Mode furtif, empreinte et CDP — sans la taxe de configuration
Browser est une couche légère sur Chromium — tout ce que vous installeriez, patcheriez et surveilleriez est accessible via un paramètre de requête. Six capacités qui comptent quand vous livrez vraiment.
Usurpation d'empreinte
Configurez le User-Agent, le viewport, le fuseau horaire, la locale et la géolocalisation sur /start — ou pointez sur un fingerprintId pour charger un JSON prédéfini. Canvas et WebGL suivent automatiquement le profil.
Mode furtif
La détection anti-fingerprint Patchright est activée par défaut pour Chromium. Pas infaillible contre tous les fournisseurs de détection — associez-le à un fournisseur de résolution CAPTCHA pour les sites adversariaux.
Pass-through CDP
GET /devtools-url retourne l'URL WebSocket, l'API HTTP DevTools et l'interface frontend. Le code Puppeteer ou Playwright existant continue de fonctionner — connectez-vous, ne réécrivez pas.
Proxy & DoH
Proxies SOCKS5, SOCKS5h, HTTP, HTTPS avec authentification et listes de bypass. DNS-over-HTTPS via Cloudflare activé par défaut. QUIC/HTTP3 optionnel par instance.
Canaux Chromium
Épinglez n'importe quelle version Chromium — chaîne de version complète, version majeure ou canal (stable / beta / dev / canary). Firefox également supporté via browser=firefox.
Buffers circulaires de débogage
500 dernières entrées console et 500 entrées réseau par instance, plus l'historique de navigation persistant avec des endpoints de requête et de suppression. Pas besoin de connecter une couche de journalisation externe.
Ajoutez un vrai navigateur à votre stack
Browser est l'un des services Hoody Kit fournis avec chaque conteneur. Aucune installation de pilote, aucun scaffolding Puppeteer, aucun patch d'empreinte. Démarrez avec une URL.