Zum Inhalt springen

Gehostete Browser

Starten Sie mit einem einzigen API-Aufruf einen Clearcote-Browser auf unseren Servern und steuern Sie ihn über das Chrome DevTools Protocol, aus Playwright, Puppeteer oder jedem anderen CDP-Client. Sie müssen nichts selbst installieren oder betreiben. Der Traffic läuft standardmäßig über Residential-IPs, und Sie zahlen pro GB aus einem Prepaid-Guthaben.

  • Residential-IPs statt Rechenzentrum. Websites sehen einen echten privaten Internetanschluss bei einem Endkunden-Provider, keine Hosting- oder Cloud-Adresse.
  • Echte Hardware statt VPS. Die Browser laufen auf unseren eigenen dedizierten physischen Servern, nicht auf geteilten virtuellen Maschinen in der Cloud.
Mehr zu gehosteten Browsern: ein SDK für lokal und Cloud (launch(cloud=True)), Agent-Runs (eine Aufgabe rein, JSON raus), Aufzeichnungen und die Ereignis-Timeline, Cookie-Sync, Secrets und 2FA sowie Übergabe an einen Menschen und Webhooks.

Gratis€5 Traffic gratis, wenn Sie GitHub verbinden. Ohne Kreditkarte.

Einmaliges Guthaben, eines pro GitHub-Konto. Das GitHub-Konto muss mindestens 30 Tage alt sein.

€5 sichern

1. API-Key erstellen

Legen Sie einen auf der Seite API-Keys an. Er beginnt mit cc_live_ und wird als Bearer-Token gesendet. Halten Sie ihn geheim: Wer ihn besitzt, kann Ihr Guthaben ausgeben.

2. Browser starten und verbinden

POST /api/v1/browsers liefert eine connectUrl: eine WebSocket-URL für genau diesen Browser, die nur einmal gilt. Verbinden Sie sich innerhalb von zwei Minuten; ein zweites Mal lässt sie sich nicht verwenden. Der Browser startet, sobald Sie sich verbinden, meist innerhalb weniger Sekunden; mit einem country kann es aber bis zu etwa einer halben Minute dauern, weil zuerst der Standort der Exit-IP ermittelt wird. Playwright gibt standardmäßig nach 30 Sekunden auf, deshalb übergeben die Beispiele ein timeout von zwei Minuten.

javascript
// Node.js + Playwright
import { chromium } from "playwright";

const res = await fetch("https://www.clearcotelabs.com/api/v1/browsers", {
  method: "POST",
  headers: { authorization: "Bearer cc_live_...", "content-type": "application/json" },
  body: JSON.stringify({ identity: "account-1", country: "us" }),
});
const { connectUrl, id, error } = await res.json();
if (error) throw new Error(error);

const browser = await chromium.connectOverCDP(connectUrl, { timeout: 120_000 }); // the browser starts as you connect
const context = browser.contexts()[0];
const page = context.pages()[0] ?? (await context.newPage());
await page.goto("https://example.com");
await browser.close(); // ends the session
javascript
// Puppeteer: the same connectUrl
const browser = await puppeteer.connect({ browserWSEndpoint: connectUrl, defaultViewport: null });
python
# Python + Playwright
import requests
from playwright.sync_api import sync_playwright

r = requests.post("https://www.clearcotelabs.com/api/v1/browsers",
                  headers={"authorization": "Bearer cc_live_..."},
                  json={"identity": "account-1", "country": "de"}).json()
with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(r["connectUrl"], timeout=120_000)
    page = browser.contexts[0].new_page()
    page.goto("https://example.com")
    browser.close()

Der Create-Aufruf antwortet mit 201 und allem, was Ihr Code braucht, um sich zu verbinden und den Preis zu kennen:

json
{
  "id": "bs_…",                       // use it with GET / DELETE /api/v1/browsers/<id>
  "connectUrl": "wss://…/v1/connect/bs_…?token=…",
  "expiresAt": "2026-09-24T10:02:00.000Z", // connect before this (two minutes)
  "worker": "w_…",
  "pricing": { "eurPerGb": 1, "eurPerHour": 0 },
  "limits": { "maxSeconds": 14400, "idleSeconds": 300 } // plus maxBytes when capped
}

Best Practices

  1. Verbinden, nie starten. Verwenden Sie connectOverCDP oder puppeteer.connect mit der connectUrl; chromium.launch() startet stattdessen einen Browser auf Ihrem eigenen Rechner.
  2. Nehmen Sie, was schon da ist. Verwenden Sie browser.contexts()[0] und dessen erste Seite statt eines neuen Kontexts: Ein neuer Kontext startet ohne die Cookies und den Storage des Profils, und Playwright gibt ihm einen emulierten 1280×720-Viewport, der nicht zum Browserfenster passt.
  3. Die Persona beim Anlegen festlegen, nicht im Skript. Land, Zeitzone und Sprache gehören in den Create-Aufruf. Wer User-Agent, Viewport oder navigator-Eigenschaften aus einem Skript überschreibt, erzeugt genau die Inkonsistenzen, nach denen die Erkennung sucht.
  4. CDP-Hooks eng halten. Breite Listener, das Abfangen jedes Requests und Init-Skripte sind der ganz eigene Fingerprint der Automatisierung. Unverändertes Playwright und Puppeteer funktionieren so, wie sie sind, bis auf zwei Aufrufe (setContent und exposeFunction): Die Engine hält die Nebeneffekte von Runtime.enable von der Seite selbst fern, sodass ein gepatchter Treiber wie Patchright optional ist statt notwendig.
  5. Eine Session, viele Seiten. Das Starten eines Browsers ist der langsame Teil; navigieren Sie innerhalb der Session. Melden Sie sich einmal mit einem Profil an statt bei jedem Lauf.
  6. Immer stoppen. Schließen Sie den Browser in einem finally, und setzen Sie maxGb und idleTimeoutSec passend zum Job, damit ein Bug keinen Browser auf Kosten Ihres Guthabens weiterlaufen lässt.
  7. Erst hinsehen, dann Code schreiben. Wenn sich eine Site seltsam verhält, beobachten Sie sie in der Live-Ansicht (oder übernehmen Sie die Steuerung), bevor Sie Waits und Workarounds einbauen.