Zum Inhalt springen

Playwright mit einer Session verbinden

Richte ein bestehendes Playwright-Skript mit einer Zeile auf eine Browserberg-Session: connectUrl trägt ein kurzlebiges Zugriffstoken, connectOverCDP macht den Rest.

Zuletzt aktualisiert:

Eine Zeile

Eine Session ist ein Endpunkt des Chrome DevTools Protocol. chromium.connectOverCDP(session.connectUrl) ersetzt chromium.launch(), und das Skript, das du schon hast, läuft gegen einen Browser in der EU. Die connectUrl jeder Session-Antwort trägt ein Zugriffstoken, das die Flotte beim WebSocket-Upgrade prüft und das fünf Minuten ab der Antwort lebt, die es geliefert hat; sobald der Socket offen ist, spielt der Ablauf des Tokens keine Rolle mehr. Wer länger gewartet hat, erzeugt mit POST /v1/sessions/:id/connect-token ein neues oder holt die Session einfach erneut.

Verbinden und steuern

import { chromium } from 'playwright-core';
import { Browserberg } from '@browserberg/sdk';

const bb = new Browserberg({
  apiKey: process.env.BROWSERBERG_API_KEY!,
  baseUrl: 'https://browserberg.com',
});

// connectUrl carries a short-lived access token. Connect within five minutes
// of the call that returned it; sessions.connectToken() re-mints one later.
await using session = await bb.sessions.create({ ttlSeconds: 600 });
const browser = await chromium.connectOverCDP(session.connectUrl);

const [context] = browser.contexts();
const page = context.pages()[0] ?? (await context.newPage());
await page.goto('https://example.com');
console.log('title:', await page.title());
console.log('token expires:', session.connectUrlExpiresAt ? 'set' : 'not set');

await browser.close();

Ein Connect-Token neu erzeugen

BASE="https://browserberg.com"
AUTH="Authorization: Bearer $BROWSERBERG_API_KEY"

SID=$(curl -s -X POST "$BASE/v1/sessions" -H "$AUTH" -H "Content-Type: application/json" -d '{"ttlSeconds": 300}' \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["session"]["id"])')

# A fresh connect URL for a caller that waited longer than the token in the create response lives.
curl -s -X POST "$BASE/v1/sessions/$SID/connect-token" -H "$AUTH" \
  | python3 -c 'import json,sys; t=json.load(sys.stdin); print("has token:", "?t=" in t["connectUrl"]); print("expires:", "expiresAt" in t)'

curl -s -X DELETE "$BASE/v1/sessions/$SID" -H "$AUTH" -o /dev/null -w 'released: %{http_code}\n'

Was du wissen solltest

Name Typ Beschreibung
browser.contexts()[0] Tipp Eine Session hat bereits einen Context und eine Seite. Sie weiterzuverwenden erhält ein wiederhergestelltes Profil; ein frischer Context nicht.
browser.close() Tipp Ein Schließen über CDP gibt die Session nicht frei und sichert ihr Profil nicht. Gib über die API frei (`await using` im TypeScript-SDK tut das beim Verlassen des Scopes) und lass den Teardown-Pfad die Sicherung übernehmen.
Token in der URL Tipp Behandle `connectUrl` fünf Minuten lang als Berechtigungsnachweis: nicht loggen, nicht an ein Modell geben. Die MCP-Tools entfernen es, bevor es eines erreicht.

Weiterlesen

  • Session-Lebenszyklus Fristen, Leerlauf-Timeouts, Keep-alive
  • Persistente Profile Einen Login über Sessions hinweg behalten
  • Sessions-Referenz Jeder Session-Endpunkt