Ohne KYC — keine ID, kein Selfie, keine Dokumente. Mit Krypto bezahlen: BTC, USDT, USDC, ETH, SOL, LTC
Sprache: Deutsch
Jetzt starten

Docs · Playwright · Chromium, Firefox, WebKit

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

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.

Zuletzt aktualisiert: · 5 Min. Lesezeit

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

Proxy-Option{"server": "http://gw.crawlrelay.com:7777", "username": ..., "password": ...}
Wolaunch(proxy=...) für den gesamten Browser oder new_context(proxy=...) pro Kontext
PortHTTP-Port 7777; HTTPS-Seiten laufen über CONNECT
SOCKS5Chromium unterstützt keine SOCKS5-Authentifizierung: Nutzen Sie den HTTP-Port
Eine IP pro Kontext-session-<id>-ttl-<minutes> im Benutzernamen des Kontexts
Typische SeitenkostenCa. 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
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
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
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.
  • 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.
  • 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 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.

Ab 0,50 $/GB · ohne KYC

Jetzt starten