Schnellstart: erste Session in fünf Minuten
Lege einen API-Schlüssel an, starte eine gehärtete Browser-Session, navigiere deterministisch und extrahiere typisierte Daten per Modellaufruf.
Zuletzt aktualisiert:
Was du bauen wirst
Diese Seite bringt dich in rund fünf Minuten von null zu strukturierten Daten. Du legst einen API-Schlüssel an, startest eine Browser-Session, navigierst sie mit einem deterministischen Schritt, der keine Inferenz kostet, und führst eine einzelne modellgestützte Extraktion aus, die typisiertes JSON zurückgibt.
Alles läuft über eine HTTP-API. Die SDKs für TypeScript und Python verpacken sie; der cURL-Tab zeigt die rohen Requests, damit du siehst, dass dazwischen keine Magie steckt. Du brauchst nur ein Konto und ein Terminal.
Vom Schlüssel zu den Daten
Speichere deinen Schlüssel als BROWSERBERG_API_KEY, wähle einen Tab und führe ihn als eine Datei aus. Jedes Beispiel erstellt eine kurzlebige Session, öffnet example.com und extrahiert die Überschrift.
Voraussetzungen: api-key inference
import { Browserberg } from '@browserberg/sdk';
const bb = new Browserberg({
apiKey: process.env.BROWSERBERG_API_KEY!,
baseUrl: 'https://browserberg.com',
// Extraction is a model call; give it more room than the 30 s default.
timeoutMs: 180_000,
});
// Released automatically when the block exits, even on an error.
await using session = await bb.sessions.create({ ttlSeconds: 300 });
// Deterministic navigation: a plain step, no model call.
await session.act({
steps: [{
encodedId: null, action: 'navigate', role: 'none',
description: 'open example.com', value: 'https://example.com',
}],
});
// One instruction against the live page, one typed result back.
const result = await session.extract({
instruction: 'the page heading and the first paragraph',
jsonSchema: {
type: 'object',
properties: {
heading: { type: 'string' },
firstParagraph: { type: 'string' },
},
required: ['heading'],
},
});
console.log(JSON.stringify(result.data, null, 2));
console.log('inference calls:', result.provenance.inferenceCalls);
import json
import os
from browserberg import Browserberg, ObservedAction
# Extraction is a model call; give it more room than the 30 s default.
bb = Browserberg(
os.environ["BROWSERBERG_API_KEY"], base_url="https://browserberg.com", timeout=180.0
)
with bb.sessions.create(ttl_seconds=300) as session:
# Deterministic navigation: a plain step, no model call.
session.act(steps=[ObservedAction(
encoded_id=None, action="navigate", role="none",
description="open example.com", value="https://example.com",
)])
# One instruction against the live page, one typed result back.
result = session.extract(
instruction="the page heading and the first paragraph",
schema={
"type": "object",
"properties": {
"heading": {"type": "string"},
"firstParagraph": {"type": "string"},
},
"required": ["heading"],
},
)
print(json.dumps(result.data, indent=2))
BASE="https://browserberg.com"
AUTH="Authorization: Bearer $BROWSERBERG_API_KEY"
JSON="Content-Type: application/json"
ID=$(curl -s -X POST "$BASE/v1/sessions" -H "$AUTH" -H "$JSON" -d '{"ttlSeconds": 300}' \
| python3 -c 'import json,sys; print(json.load(sys.stdin)["session"]["id"])')
curl -s -X POST "$BASE/v1/sessions/$ID/act" -H "$AUTH" -H "$JSON" -d '{
"steps": [{ "encodedId": null, "action": "navigate", "role": "none",
"description": "open example.com", "value": "https://example.com" }]
}' > /dev/null
curl -s -X POST "$BASE/v1/sessions/$ID/extract" -H "$AUTH" -H "$JSON" \
-d '{"instruction": "the page heading"}' \
| python3 -c 'import json,sys; print(json.dumps(json.load(sys.stdin)["data"], indent=2))'
curl -s -X DELETE "$BASE/v1/sessions/$ID" -H "$AUTH" > /dev/null
{
"heading": "Example Domain",
"firstParagraph": "This domain is for use in documentation examples without needing permission. Avoid use in operations."
}
inference calls: 1
Was gerade passiert ist
Vier Details in dieser Datei verdienen einen zweiten Blick. await using (und der with-Block in Python) gibt die Session frei, sobald der Block endet — auch bei einem Fehler. Du bezahlst Browserzeit, eine vergessene Session ist also der eine Fehler, der Geld kostet. Der Navigationsaufruf ist ein einfacher Schritt ohne Instruktion: deterministisch, wiederholbar und komplett ohne Modellaufruf.
Der Extract-Aufruf ist die einzige Zeile, die für Inferenz bezahlt. Er trägt ein JSON-Schema, sodass die Antwort als typisierte Daten zurückkommt statt als Prosa, die du ein zweites Mal parsen müsstest.
Jede Verb-Antwort endet mit einem provenance-Block: inferenceCalls, planCacheHit, tier und eine requestId. Daran erkennst du einen Cache-Replay im Unterschied zum bezahlten Modellaufruf — direkt aus der Antwort, nicht erst von der Rechnung.
Tipp · Lieber ganz ohne Code?
Der MCP-Server steuert dieselbe Art Session aus einem Coding-Agenten heraus: sechs Tools, kein SDK, ein Konfigurationsblock. Siehe die MCP-Server-Seite in diesem Abschnitt.