Patchright Proxy-Setup: Start, Kontexte, Authentifizierung und Docker
Patchright behebt die CDP-Lecks, die Playwright vor dem Start des Browsers offenlegt. Es beeinflusst nicht den Ruf Ihrer IP — und die empfohlene Tarnkonfiguration ändert leise, wie Sie Proxys rotieren.
Patchright ist ein gepatchter, unentdeckter Build von Playwright, der als Drop-in-Ersatz funktioniert: Import ändern, Code beibehalten. Die Patches greifen bevor der Browserprozess startet — sie entfernen die Automatisierungsflags und die Chrome DevTools Protocol-Aufrufe, die es einer Seite ermöglichen, eine Playwright-Sitzung in den ersten Millisekunden zu erkennen. Was sie nicht berühren, ist das Netzwerk. Jede Patchright-Proxy-Frage führt zurück zu dieser Trennung und zu einem Detail, das die README verschweigt: Die empfohlene Konfiguration für maximale Tarnung ist ein persistenter Kontext, der leise ändert, wie Sie Ausgänge rotieren. Dies ist der proxy-fokussierte Leitfaden — Start versus Kontext, authentifizierte Gateways, Docker und ein ehrlicher Bericht über die Grenzen.
Installation und der Drop-in-Proxy
Patchright wird für Python, Node und .NET ausgeliefert und patcht nur Chromium — Firefox und WebKit werden ausdrücklich nicht unterstützt. Installieren Sie es und ziehen Sie echtes Google Chrome anstelle des mitgelieferten Chromium, das das Projekt für Tarnung empfiehlt:
pip install patchright
patchright install chrome
# Node: npm i patchright && npx patchright install chrome
Die Proxy-API ist die von Playwright, unverändert, da Proxys eines der wenigen Dinge sind, die Patchright absichtlich unberührt lässt. Anmeldedaten gehen in dedizierte Felder, niemals in die Server-URL — weshalb authentifizierte Proxys hier keine Erweiterung benötigen, im Gegensatz zu Selenium oder rohem Puppeteer:
from patchright.sync_api import sync_playwright
PROXY = {
"server": "http://gate.quantumproxies.io:PORT",
"username": "USER",
"password": "PASS",
}
with sync_playwright() as p:
browser = p.chromium.launch(channel="chrome", proxy=PROXY)
page = browser.new_page()
page.goto("https://httpbin.org/ip")
print(page.text_content("body")) # the exit IP
browser.close()
Das ist die ganze Antwort auf "unterstützt Patchright Proxys": ja, identisch zu Upstream Playwright, einschließlich der bypass-Liste und der Chromium-Eigenart, dass Loopback-Adressen den Proxy vollständig umgehen — sodass Tests gegen einen lokalen Mock-Server immer so aussehen, als würde der Proxy ignoriert. Wenn Sie neu im zugrunde liegenden Modell sind, behandelt unser Playwright-Proxy-Integrationsleitfaden das Basisverhalten, und die Anti-Detect-Framework-Proxy-Karte vergleicht, welche Stacks Anmeldedaten nativ akzeptieren.
Pro-Kontext-Proxys und der globale Stub
Kontexte sind die günstige Rotationseinheit: separate Cookies, Speicher und Cache, erstellt in Millisekunden statt der Sekunden, die ein Browserstart kostet. Jeder nimmt seine eigene proxy-Option, sodass ein einziger Prozess gleichzeitig eine US-Identität und eine deutsche Identität halten kann. Es gibt einen dokumentierten Playwright-Fallstrick, der hier Leute stolpern lässt — der Browser muss mit einem globalen Proxy gestartet werden, damit Pro-Kontext-Proxys auf Chromium funktionieren. Wenn jeder Kontext ihn überschreibt, wird der globale Wert nie verwendet und kann ein beliebiger Platzhalterstring sein:
const { chromium } = require('patchright');
(async () => {
// the global proxy is never used — it only enables the per-context option
const browser = await chromium.launch({
channel: 'chrome',
proxy: { server: 'http://per-context' },
});
for (const job of jobs) {
const context = await browser.newContext({
proxy: {
server: 'http://gate.quantumproxies.io:PORT',
username: 'USER-country-' + job.country, // geo in the username
password: 'PASS',
},
});
const page = await context.newPage();
try {
await page.goto(job.url, { timeout: 30000 });
// ...extract...
} finally {
await context.close(); // burns the cookies with the exit
}
}
await browser.close();
})();
Gerichtet auf ein rotierendes Gateway, verlässt jeder Kontext von einer anderen Adresse in einem über 90 Millionen umfassenden Wohnpool ohne Listenverwaltung auf Ihrer Seite — das ist, was rotierende Proxys serverseitig tun. Beachten Sie, wo die Geo- und Sitzungssteuerungen in diesem Ausschnitt leben: im Benutzernamen, nicht in einem benutzerdefinierten Header. Das ist in Patchright wichtiger als in einfachem Playwright, da die eigene Anleitung des Projekts darin besteht, benutzerdefinierte Header und User-Agent-Überschreibungen zu vermeiden, da eingefügte Werte selbst eine Erkennungsfläche sind. Die Steuerung über Benutzername-Parameter hält die Anforderungsform des Browsers unberührt.

Der Trade-off des persistenten Kontexts
Patchrights empfohlene Tarnkonfiguration ist nicht launch(). Es ist launch_persistent_context() mit einem echten Chrome-Kanal, einem Benutzerverzeichnis, ohne Viewport-Überschreibung und im Headed-Modus — und ausdrücklich ohne benutzerdefinierte Header oder einen gefälschten User-Agent. Diese Konfiguration behält auch alle Freigabecookies, die Ihnen eine Herausforderung übergibt, sodass eine gelöste Herausforderung über Läufe hinweg wiederverwendbar ist. Die Proxy-Konsequenz ist strukturell: ein persistenter Kontext ist der Kontext. Es gibt kein newContext(), um einen zweiten Proxy daran zu hängen, also bedeutet ein Prozess eine Exit-Identität.
from patchright.sync_api import sync_playwright
with sync_playwright() as p:
ctx = p.chromium.launch_persistent_context(
user_data_dir="profiles/it-01", # one profile per identity
channel="chrome",
headless=False,
no_viewport=True,
proxy={
"server": "http://gate.quantumproxies.io:PORT",
"username": "USER-country-it-session-it01", # sticky, pinned to the profile
"password": "PASS",
},
# do NOT pass user_agent or extra_http_headers here
)
page = ctx.new_page()
page.goto("https://example.com")
ctx.close()
So wird die Rotation zu einer prozessbezogenen Entscheidung: ein Profilverzeichnis pro Identität, eine feste Sitzung, die daran gebunden ist, und ein Arbeitskräftepool anstelle einer Kontextschleife. Halten Sie die Paarung stabil — ein Profil, das Cookies hinter einem italienischen Ausgang angesammelt hat und dann hinter einem brasilianischen wieder erscheint, ist ein Widerspruch, den kein CDP-Patch verbergen kann. Praktische Regel: Benennen Sie das Verzeichnis nach der Sitzungs-ID, löschen Sie das Verzeichnis, wenn Sie die Sitzung beenden, und teilen Sie niemals ein Profil über zwei Ausgänge hinweg.
Patchright in Docker hinter einem Proxy ausführen
Das Containerisieren eines Tarnbrowsers hat zwei Fallen, und beide haben Proxy-Konsequenzen. Die erste ist --no-sandbox: der übliche Fix dafür, dass Chrome sich weigert, als Root zu starten, und ein Flag, das Anti-Bot-Anbieter gerne lesen. Führen Sie es stattdessen als Nicht-Root-Benutzer aus. Die zweite ist der Headless-Modus — das Projekt empfiehlt Headed, also verwenden Sie ein virtuelles Display, anstatt zum Headless-Schalter zu greifen:
# Dockerfile
FROM python:3.12-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
xvfb ca-certificates && rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir patchright \
&& patchright install --with-deps chrome
RUN useradd -m app
USER app
WORKDIR /home/app
COPY --chown=app:app scrape.py .
# headed under a virtual display: no --no-sandbox, no HeadlessChrome tell
CMD ["xvfb-run", "-a", "python", "scrape.py"]
# build & run:
# docker build -t patchright-worker .
# docker run --ipc=host --shm-size=1g patchright-worker
Die --ipc=host und größere /dev/shm sind die Standard-Chromium-in-Docker-Fixes für Tab-Abstürze unter Last, direkt aus den Playwright-Container-Dokumenten. Eine proxy-spezifische Falle: Wenn Sie ein lokales Relay ausführen, um Anmeldedaten zu einem SOCKS5-Endpunkt hinzuzufügen, ist 127.0.0.1 innerhalb des Containers der Container, nicht Ihr Host. Entweder setzen Sie das Relay in denselben Container, adressieren den Host explizit oder führen das Relay als Sidecar in einem gemeinsamen Netzwerk aus. Und halten Sie das Profilverzeichnis auf einem Volume, wenn Sie persistente Kontexte verwenden, da sonst jeder Container-Neustart die Freigabecookies wegwirft, für die Sie Bandbreite bezahlt haben.
Was die Patches abdecken und was sie nie werden
Es lohnt sich genau zu wissen, was Sie kaufen. Patchrights Hauptfix ist das Runtime.enable-Leck — es führt JavaScript in isolierten Ausführungskontexten aus, anstatt die Domäne zu aktivieren, die das Spiel verrät. Es deaktiviert die Console-API, um Console.enable zu schließen (sodass page.on("console")-Protokollierung wegfällt, was ein echter Kostenfaktor ist, wenn Sie einen Proxy-Fehler debuggen). Es überschreibt die Standardflags von Playwright: fügt --disable-blink-features=AutomationControlled hinzu, entfernt --enable-automation und setzt --disable-popup-blocking, --disable-component-update, --disable-default-apps und --disable-extensions zurück. Es greift auch in geschlossene Schattenwurzeln mit gewöhnlichen Lokatoren ein.
Lesen Sie diese Flag-Liste auch als Bandbreitenposten. Die Wiederherstellung von Komponentenaktualisierungen und Standard-Apps bedeutet einen Browser, der im Hintergrund nach Hause telefoniert — durch Ihren gemessenen Ausgang. Messen Sie den Transfer einer Sitzung, bevor Sie skalieren, und blockieren Sie Bild-, Schrift- und Medienressourcentypen im Kontext, um die Kosten pro Seite niedrig zu halten. Nichts davon berührt die andere Wand: ein gepatchter Browser auf einer verbrannten Rechenzentrums-IP ist immer noch eine verbrannte IP, und die Anfrage wird aufgrund des Rufs abgelehnt, bevor irgendeine dieser Clevernessen bewertet wird. Überprüfen Sie eine Adresse mit dem kostenlosen IP-Qualitätsprüfer, bevor Sie schließen, dass die Patches fehlgeschlagen sind, und setzen Sie residential proxies unter den Browser, sodass die beiden Schichten unterschiedliche Probleme lösen.

Häufig gestellte Fragen
Wie setze ich einen Proxy in Patchright?
Genau wie in Playwright: Übergeben Sie proxy={"server": "http://host:port", "username": "USER", "password": "PASS"} an chromium.launch(), launch_persistent_context() oder new_context(). Patchright patcht die Proxy-Schicht nicht, sodass jedes Upstream-Verhalten — die Bypass-Liste, die Loopback-Ausnahme — unverändert gilt.
Unterstützt Patchright SOCKS5-Proxy-Authentifizierung?
Nein, und es ist eine Chromium-Einschränkung und keine von Patchright: Chromium hat keinen Mechanismus für SOCKS-Anmeldedaten, sodass authentifizierte SOCKS5-Endpunkte fehlschlagen. Verwenden Sie den HTTP-Port desselben Gateways mit den Benutzername- und Passwortfeldern oder authentifizieren Sie sich durch IP-Whitelist und behalten Sie das SOCKS5-Schema bei — jeder QuantumProxies-Plan unterstützt Whitelisting als Alternative zu Benutzer:Pass. Der vollständige Workaround-Satz befindet sich in unserem Playwright SOCKS5-Authentifizierungsleitfaden, der hier unverändert gilt.
Kann Patchright einen anderen Proxy pro Kontext verwenden?
Ja, wenn Sie den Browser mit einem globalen Proxy-Wert gestartet haben — sogar einem Platzhalter —, weil Chromium Pro-Kontext-Proxys nur aktiviert, wenn einer beim Start vorhanden ist. Die Ausnahme ist die von Patchright empfohlene persistente Kontextkonfiguration für Tarnung: Das gibt Ihnen einen einzigen Kontext, sodass Rotation einen separaten Prozess mit eigenem Profilverzeichnis bedeutet.
Ist Patchright nur für Chromium?
Ja. Das Projekt gibt klar an, dass nur Chromium-basierte Browser gepatcht werden; Firefox und WebKit werden nicht unterstützt. Wenn Sie Firefox-Engine-Tarnung mit Geo benötigen, das vom Proxy-Ausgang abgeleitet ist, ist das ein anderes Werkzeug — siehe unseren Camoufox Proxy- und GeoIP-Leitfaden.
Werde ich mit Patchright immer noch blockiert?
Bei schwierigen Zielen, ja. Unabhängige Tests zeigen, dass der Headless-Modus immer noch ein HeadlessChrome-Erkennungsmerkmal leakt und Herausforderungsseiten, die ein gepatchter Browser erreicht, aber nicht lösen kann. Die Patches schließen die billigen Automatisierungsprüfungen; IP-Ruf, TLS-Fingerabdrücke und Herausforderungsauflösung sind separate Probleme, die separate Antworten benötigen.
Behandeln Sie Patchright als das, was es ist: eine sehr gute Lösung für eine bestimmte Klasse von Lecks, geliefert, ohne dass Sie eine Zeile Playwright umschreiben müssen. Kombinieren Sie es mit Ausgängen, die sauber, fest sind, wo Identität zählt, und vor dem Lauf überprüft — dann sind die verbleibenden Fehler tatsächlich auf das Ziel zurückzuführen, nicht auf Ihre Konfiguration. Dies ist technische Anleitung, keine Rechtsberatung: Automatisieren Sie im Rahmen des Gesetzes und der Bedingungen der Seite.