# Playwright Proxy Setup mit rotierenden Residential-IP-Adressen (Python und Node.js)

> Playwright Proxy Setup in Python und Node.js: authentifizierte Residential-Proxys pro Browser oder Kontext, Sticky Sessions, leichtere Seiten.

- URL: https://crawlrelay.com/de/docs/playwright/
- Zuletzt aktualisiert: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Geben Sie den Residential Proxy beim Start für einen Exit pro Browser oder pro Kontext für ein Land oder eine Sticky-Session pro Kontext an. Sperren Sie dann den Traffic, den Sie nicht benötigen.

**Kurze Antwort — Wie verwende ich einen authentifizierten Residential Proxy in Playwright?**

Übergeben Sie ein `proxy`-Objekt mit `server`, `username` und `password` an `launch()` oder an `new_context()`: `server` ist `http://gw.crawlrelay.com:7777`, und die Zugangsdaten kommen in eigene Felder, niemals in die Server-URL. Mit **CrawlRelay** Residential-Proxys geben Sie das Land und eine Session-ID im Benutzernamen an, damit jeder Kontext seinen eigenen Exit erhält. Traffic kostet 0,50 $/GB ab 50 GB. Bezahlen Sie mit Krypto, ohne KYC.

## Playwright Einrichtung auf einen Blick

| Attribut | Wert |
| --- | --- |
| Proxy-Option | `{"server": "http://gw.crawlrelay.com:7777", "username": ..., "password": ...}` |
| Wo | `launch(proxy=...)` für den gesamten Browser oder `new_context(proxy=...)` pro Kontext |
| Port | HTTP-Port 7777; HTTPS-Seiten laufen über CONNECT |
| SOCKS5 | Chromium unterstützt keine SOCKS5-Authentifizierung: Nutzen Sie den HTTP-Port |
| Eine IP pro Kontext | `-session-<id>-ttl-<minutes>` im Benutzernamen des Kontexts |
| Typische Seitenkosten | Ca. 2 MB mit allen Ressourcen; wenige hundert KB, wenn Bilder, Schriften und Medien geblockt sind |

## Wie gebe ich jedem Browser-Kontext sein eigenes Land oder seine eigene Session?

Erstellen Sie einen Kontext pro Land oder pro Sticky-Session. Kontexte sind im Vergleich zu Browsern günstig und jeder speichert eigene Cookies, Speicher und Proxy-Zugangsdaten. Stimmen Sie die Locale des Kontexts auf das Exit-Land ab, damit die Seite einen konsistenten Besucher sieht.

*Python (sync API): ein Kontext pro Land*

```python
from playwright.sync_api import sync_playwright

GATEWAY = "http://gw.crawlrelay.com:7777"
LOCALES = {"us": "en-US", "de": "de-DE", "jp": "ja-JP"}

with sync_playwright() as p:
    browser = p.chromium.launch()
    for country, locale in LOCALES.items():
        context = browser.new_context(
            proxy={"server": GATEWAY, "username": "USERNAME-country-%s" % country, "password": "PASSWORD"},
            locale=locale,
        )
        page = context.new_page()
        page.goto("https://api.ipify.org", wait_until="domcontentloaded")
        print(country, page.inner_text("body"))
        context.close()
    browser.close()
```

## Wie setze ich den Residential Proxy in Playwright für Node.js und reduziere Traffic?

Die Option hat in Node.js dieselbe Form. Der Großteil des Gewichts einer gerenderten Seite sind Bilder, Schriften und Medien: Die Median-Seite wog 2.164 KB auf Mobile laut HTTP Archive Web Almanac 2025. Wenn Sie nur Text und Links benötigen, brechen Sie diese Anfragen in einem Routen-Handler ab.

*Node.js: Sticky-Session beim Start, große Ressourcen blockiert*

```javascript
import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: {
    server: "http://gw.crawlrelay.com:7777",
    username: "USERNAME-country-us-session-pw1-ttl-30",
    password: "PASSWORD",
  },
});
const context = await browser.newContext();
// Images, fonts and media are most of a page's bytes
await context.route("**/*", (route) =>
  ["image", "font", "media"].includes(route.request().resourceType()) ? route.abort() : route.continue()
);
const page = await context.newPage();
const response = await page.goto("https://example.com/", { waitUntil: "domcontentloaded" });
console.log(response.status(), await page.title());
await browser.close();
```

## Wie führe ich viele Seiten parallel mit asyncio aus?

Verwenden Sie die Async-API mit einem festen Pool von Kontexten. Jeder Kontext hält eine Sticky-Session für seine Lebensdauer, so sieht eine Seite wenige stabile Besucher statt eine IP pro Anfrage. Recyceln Sie einen Kontext mit einer neuen Session-ID nach einer definierten Seitenzahl oder nach einem Fehler.

*Python (async API): ein Pool aus Sticky-Kontexten*

```python
import asyncio
import uuid

from playwright.async_api import async_playwright

GATEWAY = "http://gw.crawlrelay.com:7777"
WORKERS = 4


async def worker(browser, queue):
    session = uuid.uuid4().hex[:10]
    context = await browser.new_context(proxy={
        "server": GATEWAY,
        "username": "USERNAME-country-us-session-%s-ttl-30" % session,
        "password": "PASSWORD",
    })
    page = await context.new_page()
    while not queue.empty():
        url = await queue.get()
        try:
            response = await page.goto(url, wait_until="domcontentloaded", timeout=45000)
            print(session, url, response.status if response else None)
        except Exception as exc:  # timeouts and network errors: log and move on
            print(session, url, type(exc).__name__)
        finally:
            queue.task_done()
    await context.close()


async def main(urls):
    queue = asyncio.Queue()
    for url in urls:
        queue.put_nowait(url)
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        await asyncio.gather(*(worker(browser, queue) for _ in range(WORKERS)))
        await browser.close()


asyncio.run(main(["https://example.com/", "https://example.org/"]))
```

## Warum erhalte ich ERR_TUNNEL_CONNECTION_FAILED oder ERR_PROXY_CONNECTION_FAILED?

- **net::ERR_TUNNEL_CONNECTION_FAILED** bedeutet, dass der Residential Proxy die CONNECT-Anfrage nicht akzeptiert hat. Meist standen die Zugangsdaten innerhalb von `server` statt in `username` und `password`, sodass Chromium keine gesendet hat. Siehe [den Tunnel-Fehler](https://crawlrelay.com/de/docs/errors/err-tunnel-connection-failed/).
- **net::ERR_PROXY_CONNECTION_FAILED** bedeutet, dass der Browser das Gateway nie erreicht hat: ein Tippfehler beim Host oder Port oder ein Netzwerk, das den Port blockiert. Siehe [den Proxy-Verbindungsfehler](https://crawlrelay.com/de/docs/errors/err-proxy-connection-failed/).
- **Timeout 30000ms überschritten** bei `goto` heißt meist, dass Sie auf `load` oder `networkidle` auf einer Seite warten, die Tracker ständig nachlädt. Warten Sie auf `domcontentloaded` und dann auf den benötigten Selector.

## Was sollte ein Playwright-Scraper nicht tun?

Nutzen Sie Playwright, um öffentliche Seiten zu rendern, die JavaScript benötigen, nicht um Menschen zu imitieren. CrawlRelay's [Acceptable Use Policy](https://crawlrelay.com/de/acceptable-use/) verbietet die Nutzung von Browsern über unser Gateway zum massenhaften Erstellen von Accounts, Übernehmen von Accounts, automatischen Lösen von CAPTCHA oder Umgehen von absichtlichen Blocks einer Seite. Wir dokumentieren keine Stealth-Plugins oder Fingerprinting-Spoofing. Wenn eine Seite Ihren Browser herausfordert, drosseln Sie das Tempo, prüfen Sie robots.txt und Bedingungen und fragen Sie ggf. um Zugang oder nutzen Sie die API der Seite.

## Playwright und Residential-Proxys: Fragen

### Kann ich für jeden Playwright-Kontext einen anderen Proxy verwenden?

Ja. Übergeben Sie `proxy` an `browser.new_context()` in Python oder `browser.newContext()` in Node.js. Jeder Kontext hat dann seinen eigenen Exit, Cookies und Speicher. Sehr alte Playwright-Versionen auf Windows erforderten beim Start auch einen Proxy; falls dieser Fehler auftaucht, starten Sie mit einem Platzhalter-Proxy und setzen den echten pro Kontext.

### Unterstützt Playwright SOCKS5-Proxys mit Authentifizierung?

Nicht in Chromium, das keine SOCKS5-Authentifizierung mit Benutzername und Passwort unterstützt. Nutzen Sie den HTTP-Port des Gateways (7777): Er verarbeitet HTTPS-Seiten über CONNECT-Tunnel und unterstützt Benutzername und Passwort in jedem Browser-Engine, die Playwright steuert.

### Wie überprüfe ich, welche IP und welches Land eine Playwright-Seite nutzt?

Öffnen Sie `https://api.ipify.org` im selben Kontext vor Ihrer Zielseite und lesen Sie den Body-Text, wie im ersten Beispiel. Beachten Sie, dass eine Sticky-Session diese IP nur hält, solange das Residential-Gerät online bleibt; protokollieren Sie die IP zu Beginn jedes Kontexts, um Änderungen zu erkennen.

### Wie viel Traffic verbraucht eine Playwright-Seite über einen Proxy?

Alles wird berechnet: HTML, Skripte, Styles, Bilder, Schriften und API-Aufrufe. Eine volle Seite liegt im Median bei ca. 2 MB; das Blockieren von Bildern, Schriften und Medien reduziert das oft auf wenige hundert Kilobyte. Messen Sie Ihre echten Seiten, indem Sie die Antwortgrößen in einem `response`-Handler für 50 Seiten aufsummieren.

### Sollte ich für Scraping headless oder headed Browser verwenden?

Headless ist die übliche Wahl für Server und verbraucht weniger Ressourcen. Verwenden Sie einen headed Browser nur, um zu debuggen, was eine Seite zeigt. Keiner ändert die Regeln: Rendern Sie öffentliche Seiten mit angemessenem Tempo und respektieren Sie robots.txt und die Nutzungsbedingungen der Seite.

**Renden Sie öffentliche Seiten über Residential IPs** 5,94 $ für 10 GB, 0,50 $/GB von 50 GB. [Preise ansehen](https://crawlrelay.com/de/pricing/) · [Puppeteer Anleitung](https://crawlrelay.com/de/docs/puppeteer/)

---

CrawlRelay: CrawlRelay ist ein entwicklerfreundlicher rotierender Residential-Proxy- und 4G/5G mobile Proxy-Service für Scraper und KI-Datenpipelines: nicht verfallende Pay-as-you-go-Traffic ab 0,50 $/GB, mit Krypto bezahlt, ohne ID-Upload. Kein KYC — keine ID, kein Selfie, keine Dokumente. Mit Krypto bezahlen.
