Zum Inhalt springen
Chromium als URL
Fingerprint-Spoofing
Tab-Steuerung
Screenshot-API
JavaScript Eval
Netzwerkabfangung
Chrome DevTools Protocol
Puppeteer-kompatibel
Chromium als URL
Fingerprint-Spoofing
Tab-Steuerung
Screenshot-API
JavaScript Eval
Netzwerkabfangung
Chrome DevTools Protocol
Puppeteer-kompatibel
Chromium als URL
Fingerprint-Spoofing
Tab-Steuerung
Screenshot-API
JavaScript Eval
Netzwerkabfangung
Chrome DevTools Protocol
Puppeteer-kompatibel
Chromium als URL
Fingerprint-Spoofing
Tab-Steuerung
Screenshot-API
JavaScript Eval
Netzwerkabfangung
Chrome DevTools Protocol
Puppeteer-kompatibel
BrowserKit-Dienst

Chromium als URL

Headless oder sichtbares Chromium, steuerbar über eine flache HTTP-API. Standardmäßig Stealth aktiv, CDP WebSocket, Screenshot, Eval, Cookies und mehr.

abc123-def456-browser-1.node-us-1.containers.hoody.com
GET /start?browser_id=main&stealth=true&timezoneId=America/New_York
200 OK

# 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

Drei Endpoint-Klassen, eine URL

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.

01 / 05

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.

curl /start?stealth=true → bereit
02 / 05

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.

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

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.

GET /screenshot?fullPage=true → PNG-Binär
04 / 05

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.

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

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.

Schleife: Screenshot → eval('click(x,y)')
Vorher· Traditionelles Headless

docker run chromium + Fonts + Fingerprint-Patches

Nachher· Hoody Browser

curl /start?stealth=true → bereit

API

Chromium über HTTP starten, steuern und herunterfahren

Jeder Endpunkt liefert deterministisches JSON oder Binary. Kein stderr-Scraping, keine /tmp-Dateien, keine Race-Conditions.

browser-api.sh

# Full Browser flow — start, navigate, extract, shutdown

 

URL="https://abc123-def456-browser-1.node-us-1.containers.hoody.com"

ID="main"

 

# 1. Spawn a stealth Chromium (Patchright)

curl -s "$URL/start?browser_id=$ID&stealth=true"

 

# 2. Navigate to a page

curl -s "$URL/browse?browser_id=$ID&url=https://example.com"

 

# 3. Read the page title back

curl -s -X POST "$URL/eval?browser_id=$ID" \

-H 'Content-Type: application/json' \

-d '{"script":"document.title"}'

# > { "result": "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://abc123-def456-browser-1.node-us-1.containers.hoody.com';

const id = 'main';

 

// 1. Spawn a stealth Chromium (Patchright)

const start = await fetch(`${BASE}/start?browser_id=${id}&stealth=true`);

const { webSocketDebuggerUrl } = await start.json();

 

// 2. Navigate to a page

await fetch(`${BASE}/browse?browser_id=${id}&url=https://example.com`);

 

// 3. Read the page title back

const r = await fetch(`${BASE}/eval?browser_id=${id}`, {

method: 'POST',

headers: { 'Content-Type': 'application/json' },

body: JSON.stringify({ script: 'document.title' })

});

const { result } = 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://abc123-def456-browser-1.node-us-1.containers.hoody.com'

id = 'main'

 

# 1. Spawn a stealth Chromium (Patchright)

start = requests.get(f'{BASE}/start', params={'browser_id': id, 'stealth': 'true'})

ws = start.json()['webSocketDebuggerUrl']

 

# 2. Navigate to a page

requests.get(f'{BASE}/browse', params={'browser_id': id, 'url': 'https://example.com'})

 

# 3. Read the page title back

r = requests.post(f'{BASE}/eval',

params={'browser_id': id},

json={'script': 'document.title'})

title = r.json()['result']

# => "Example Domain"

 

# 4. Release the slot

requests.get(f'{BASE}/shutdown', params={'browser_id': id})

Einsatzbereiche

Wo Teams Browser einsetzen

Eine flache HTTP-Schicht über Chromium eröffnet Integrationspunkte, die ein lokal installierter Headless-Browser nicht kann.

{01}

Datenpipelines

Gerendertes HTML und JSON in dein Warehouse aufnehmen. Die /eval-Aufrufe mit Cron triggern, Ergebnisse in Snowflake/BigQuery pipen.

{02}

Agent-Frameworks

An Claude Computer Use, OpenAI Operator oder LangChain Browser-Tools anschließen. Screenshot + eval ist die primitive Schnittstelle.

{03}

Authentifizierte Workflows

Eingeloggte Dashboards steuern – SaaS-Admin-Panels, Bank-Portale, interne Tools. POST /cookies persistiert Sitzungen.

{04}

Review-Apps

Browser-Vorschauen pro PR. CI startet eine Browser-Instanz gegen den gestuften Build, gibt /screenshot zurück.

{05}

Geplantes Monitoring

Cron-getriggerte /screenshot und /network Erfassungen für Uptime-, SLO- und Perf-Dashboards.

{06}

Compliance-Snapshots

Zeitgestempelte, Fingerprint-gesperrte Erfassungen einer Drittanbieter-Seite für rechtliche, Audit- oder Beweisworkflows.

API

23 Operationen, 4 Endpoint-Gruppen

Jede Browser-Fähigkeit ist ein flacher HTTP-Aufruf. Methoden-Varianten auf dem gleichen Pfad werden separat aufgelistet.

Interaktion

8 Endpoints

curl /browse?browser_id=main&url=https://example.com → { tabId, url, created, reused }

GET
/browse?url=Instanz erstellen oder fortsetzen mit browser_id, Fingerprint, Stealth, Proxy, Viewport.
POST
/browseEine Instanz pausieren – Zustand bleibt erhalten. /restart zum Fortsetzen verwenden.
GET
/eval?script=Stoppen und mit optional aktualisierter Konfiguration neu starten.
POST
/evalInstanz beenden und Slot freigeben. ?force=true tötet feststeckende Instanzen.
GET
/htmlMit einem JSON-Body navigieren – waitUntil, Timeout, Referer, Header.
GET
/textKurzform-Navigation für Shell-curl-Ergonomie.
GET
/screenshotJavaScript (plain oder base64) im Seitenkontext ausführen, Ergebnis zurückgeben.
GET
/pdfInline-Skript-Eval für One-Shot-Lesevorgänge wie document.title.

Sitzungszustand

5 Endpoints

curl -X POST /cookies -d '{ cookies: [{ name, value, url }] }' → { added: 2 }

GET
/cookiesdocument.documentElement.outerHTML zurückgeben – gerendert, nicht roh.
POST
/cookiesdocument.body.innerText zurückgeben – was ein Mensch liest.
DELETE
/cookiesPNG / JPEG / base64 – fullPage unterstützt, JPEG-Qualität 0–100.
GET
/historyAls PDF rendern – A4/Letter, Querformat, Ränder, printBackground.
DELETE
/historyCookies auflisten, optional nach URL gefiltert.

Introspektion

6 Endpoints

curl /devtools-url?browser_id=main → { webSocketDebuggerUrl, devtoolsHttpUrl, devtoolsFrontendUrl }

GET
/metadataCookies hinzufügen – name, value, domain, path, httpOnly, secure, sameSite.
GET
/tabsAlle Cookies für die Instanz löschen.
POST
/tab/closeVollständige Instanz-Metadaten – Sitzung, Viewport, DevTools-URLs, Tab-Liste.
GET
/devtools-urlOffene Tabs mit id, url, title, isActive auflisten.
GET
/consoleTab nach id schließen – oder den aktiven Tab, wenn keiner angegeben.
GET
/networkCDP-WebSocket + DevTools HTTP + Frontend-UI-URLs zurückgeben.

Lebenszyklus

5 Endpoints

curl /start?browser_id=main&stealth=true → { browser_id, webSocketDebuggerUrl, stealth: true }

GET
/startLetzte 500 Konsoleneinträge – log, error, warn, info.
GET
/stopLetzte 500 Netzwerkeinträge – Methode, URL, Status, resourceType.
GET
/restartPaginierter persistenter Browserverlauf mit Domain- und Zeitfiltern.
GET
/shutdownVerlaufseinträge, die dem Filter entsprechen, löschen.
GET
/api/v1/browser/healthLiveness- und Readiness-Check — bereitgestellt von der zentralen API (api.hoody.com), nicht von der Container-URL.

24 Endpoints in vier Funktionsbereichen. 23 laufen gegen die URL deines Browser-Containers mit den gezeigten Kurzpfaden; der Health-Check ist die einzige Ausnahme und wird von der zentralen API unter api.hoody.com/api/v1/browser/health bereitgestellt. Die Methoden folgen den Docs: browse und eval akzeptieren GET und POST; cookies ergänzt GET, POST und DELETE.

Fähigkeiten

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.

Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id

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.

Docs lesen