Chromium als URL
Headless oder sichtbares Chromium, steuerbar über eine flache HTTP-API. Standardmäßig Stealth aktiv, CDP WebSocket, Screenshot, Eval, Cookies und mehr.
# Stealthes Chromium mit Fingerprint starten
$ curl "/start?browser_id=main&stealth=true&timezoneId=America/New_York&locale=en-US"
[ "browser_id": "main",
"webSocketDebuggerUrl": "ws://.../devtools/browser/...",
"stealth": true ]
# Navigieren – oder WS-URL an Puppeteer übergeben
$ curl "/browse?browser_id=main&url=https://hoody.com"
200 OK
# Aufzeichnen; funktioniert bereits mit deinem vorhandenen CDP-Client
$ curl "/screenshot?browser_id=main&format=png" -o shot.png
1920x1080 PNG
Einen echten Browser über HTTP steuern, beobachten und inspizieren
Jede Browser-Instanz stellt dieselben Primitive bereit, auf die Puppeteer und Playwright setzen – Navigation, DOM-Extraktion, Screenshots, JS-Ausführung – als einfache HTTP-Endpunkte.
Eine Instanz starten, auf eine URL zeigen
GET /start startet ein stealth Chromium mit deinem Fingerprint. GET /browse?url=… lädt eine Seite. Ein HTTP-Roundtrip, kein Treiber-Install, kein Docker-Image zu pflegen.
JS auf der Seite ausführen, strukturierte Daten zurückgeben
POST /eval führt beliebiges JavaScript im Seitenkontext aus. GET /html und GET /text liefern den gerenderten DOM und sichtbaren Text. Keine Selector-Bibliothek, kein Headless-Browser-SDK.
Screenshot oder PDF der aktuellen Seite
GET /screenshot liefert PNG, JPEG oder Base64 — vollständige Seite oder Viewport. GET /pdf rendert auf A4/Letter mit Querformat und Rändern. Binär kommt direkt zurück, keine Headless-Chrome-Flags nötig.
CDP-URLs holen, an alles weitergeben
GET /devtools-url liefert drei URLs: den CDP-WebSocket (für Puppeteer / Playwright / jeden CDP-Client), die DevTools-HTTP-API und die DevTools-Frontend-UI. Die Frontend-URL in einem Browser-Tab öffnen, um zu sehen, was die Headless-Instanz sieht.
Screenshot → entscheiden → klicken, in einer Schleife
Die Form, die jedes Computer-Use-Modell erwartet: ein Screenshot, ein DOM-Snapshot, eine Möglichkeit, bei (x, y) zu klicken.
docker run chromium + Fonts + Fingerprint-Patches
curl /start?stealth=true → bereit
Chromium über HTTP starten, steuern und herunterfahren
Jeder Endpunkt liefert deterministisches JSON oder Binary. Kein stderr-Scraping, keine /tmp-Dateien, keine Race-Conditions.
# 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])
Wo Teams Browser einsetzen
Eine flache HTTP-Schicht über Chromium eröffnet Integrationspunkte, die ein lokal installierter Headless-Browser nicht kann.
Datenpipelines
Gerendertes HTML und JSON in dein Warehouse aufnehmen. Die /eval-Aufrufe mit Cron triggern, Ergebnisse in Snowflake/BigQuery pipen.
Agent-Frameworks
An Claude Computer Use, OpenAI Operator oder LangChain Browser-Tools anschließen. Screenshot + eval ist die primitive Schnittstelle.
Authentifizierte Workflows
Eingeloggte Dashboards steuern – SaaS-Admin-Panels, Bank-Portale, interne Tools. POST /cookies persistiert Sitzungen.
Review-Apps
Browser-Vorschauen pro PR. CI startet eine Browser-Instanz gegen den gestuften Build, gibt /screenshot zurück.
Geplantes Monitoring
Cron-getriggerte /screenshot und /network Erfassungen für Uptime-, SLO- und Perf-Dashboards.
Compliance-Snapshots
Zeitgestempelte, Fingerprint-gesperrte Erfassungen einer Drittanbieter-Seite für rechtliche, Audit- oder Beweisworkflows.
23 Operationen, 4 Endpoint-Gruppen
Jede Browser-Fähigkeit ist ein flacher HTTP-Aufruf. Methoden-Varianten auf dem gleichen Pfad werden separat aufgelistet.
Interaktion
[count, plural, one [# Endpoint] other [# Endpoints]]'curl -X POST /eval -d '["script":"document.title"]' → "Example"
Sitzungszustand
[count, plural, one [# Endpoint] other [# Endpoints]]'curl -X POST /cookies -d '[[name,value,domain,...]]' → [ added: 4 ]
Introspektion
[count, plural, one [# Endpoint] other [# Endpoints]]'curl /devtools-url?browser_id=main → [ ws, http, frontend ]
Lebenszyklus
[count, plural, one [# Endpoint] other [# Endpoints]]'curl /start?browser_id=main&stealth=true → [ ws, stealth: true ]
Plus plattformvererbtes GET /health und GET /metrics auf jedem Hoody-Kit-Dienst.
Stealth, Fingerprinting und CDP – ohne Einrichtungskosten
Browser ist eine duenne Schicht über Chromium — alles, was du sonst installieren, patchen und betreuen würdest, ist ein Query-Parameter.
Fingerprint-Spoofing
UA, Viewport, Zeitzone, Locale und Geolocation bei /start konfigurieren — oder auf eine fingerprintId zeigen für konsistentes Profil.
Stealth-Modus
Patchright Anti-Erkennung ist standardmäßig für Chromium aktiviert. Nicht kugelsicher gegen jeden Erkennungsanbieter, aber solide für die meisten Faelle.
CDP-Durchleitung
GET /devtools-url liefert die WebSocket-URL, DevTools-HTTP-API und Frontend-UI. Bestehender Puppeteer- oder Playwright-Code läuft weiter — verbinden, nicht neu schreiben.
Proxy & DoH
SOCKS5, SOCKS5h, HTTP, HTTPS-Proxies mit Auth und Bypass-Listen. DNS-over-HTTPS per Cloudflare standardmäßig aktiviert.
Chromium-Kanäle
Jeden Chromium-Build anpinnen — vollständiger Versions-String, Haupt-Version oder Kanal (stable / beta / dev / canary).
Debug-Ringpuffer
Letzte 500 Konsolen-Einträge und 500 Netzwerk-Einträge pro Instanz, plus persistenter Browser-Verlauf mit Suchfunktion.
Einen echten Browser zu deinem Stack hinzufügen
Browser ist einer der Hoody-Kit-Services, die mit jedem Container mitgeliefert werden. Kein Treiber-Install, kein Puppeteer-Setup.