Aller au contenu
accueil / kit / navigateur
BrowserService Kit

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.

PROJECT-CONTAINER-browser-1.SERVER.containers.hoody.com
GET /start?browser_id=main&stealth=true&timezoneId=America/New_York
200 OK

# 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

accueil / kit / navigateur / démo
Trois classes d'endpoints, une seule URL

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.

01 / 05

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.

curl /start?stealth=true → prêt
02 / 05

É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.

POST /eval → [ "Headline 1", "Headline 2", … ]
03 / 05

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.

GET /screenshot?fullPage=true → PNG binary
04 / 05

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.

GET /devtools-url → [ ws, http, frontend ]
05 / 05

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.

boucle : screenshot → eval('click(x,y)')
Avant· Headless traditionnel

docker run chromium + fonts + fingerprint patches

Après· Hoody Browser

curl /start?stealth=true → prêt

accueil / kit / navigateur / api
API

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.

browser-api.sh

# 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"

browser-api.js

// 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]`);

browser_api.py

# 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])

accueil / kit / navigateur / utilisations
Utilisations

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.

{01}

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.

{02}

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.

{03}

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.

{04}

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.

{05}

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.

{06}

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.

accueil / kit / navigateur / endpoints
API

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"

POST
/browseNaviguer avec un corps JSON — waitUntil, timeout, referer, en-têtes.
GET
/browse?url=Navigation abrégée pour une ergonomie curl depuis le shell.
POST
/evalExécuter du JavaScript (brut ou base64) dans le contexte de la page, retourner le résultat.
GET
/eval?script=Éval de script inline pour des lectures ponctuelles comme document.title.
GET
/htmlRetourner document.documentElement.outerHTML — rendu, pas brut.
GET
/textRetourner document.body.innerText — ce qu'un humain lit.
GET
/screenshotPNG / JPEG / base64 — page entière supportée, qualité JPEG 0-100.
GET
/pdfGénérer un PDF — A4/Letter, paysage, marges, printBackground.

État de session

[count, plural, one [# endpoint] other [# endpoints]]'

curl -X POST /cookies -d '[[name,value,domain,...]]' → [ added: 4 ]

GET
/cookiesLister les cookies, filtrable optionnellement par URL.
POST
/cookiesAjouter des cookies — nom, valeur, domaine, chemin, httpOnly, secure, sameSite.
DELETE
/cookiesSupprimer tous les cookies de l'instance.
GET
/metadataMétadonnées complètes de l'instance — session, viewport, URLs DevTools, liste d'onglets.
GET
/tabsLister les onglets ouverts avec id, url, titre, isActive.
POST
/tab/closeFermer un onglet par id — ou l'onglet actif si aucun n'est spécifié.

Introspection

[count, plural, one [# endpoint] other [# endpoints]]'

curl /devtools-url?browser_id=main → [ ws, http, frontend ]

GET
/devtools-urlRetourner le WebSocket CDP + URLs HTTP DevTools + interface frontend.
GET
/console500 dernières entrées console — log, error, warn, info.
GET
/network500 dernières entrées réseau — méthode, URL, statut, resourceType.
GET
/historyHistorique de navigation persistant paginé avec filtres de domaine et de temps.
DELETE
/historySupprimer les entrées d'historique correspondant au filtre.

Cycle de vie

[count, plural, one [# endpoint] other [# endpoints]]'

curl /start?browser_id=main&stealth=true → [ ws, stealth: true ]

GET
/startCréer ou reprendre une instance avec browser_id, empreinte, furtivité, proxy, viewport.
GET
/stopMettre en pause une instance — l'état persiste. Utilisez /restart pour reprendre.
GET
/restartArrêter et relancer avec une configuration éventuellement mise à jour.
GET
/shutdownTerminer l'instance et libérer l'emplacement. ?force=true arrête les instances bloquées.

Plus GET /health et GET /metrics hérités de la plateforme sur chaque service Hoody Kit.

accueil / kit / navigateur / capacités
Capacités

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.

Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id

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.

accueil / kit / navigateur / démarrer

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.

Lire la documentation