Konfiguracja Proxy Patchright: Uruchomienie, Konteksty, Autoryzacja i Docker
Patchright łata wycieki CDP, które ujawniają Playwrighta przed uruchomieniem przeglądarki. Nie wpływa na reputację Twojego IP — a zalecana konfiguracja stealth cicho zmienia sposób rotacji proxy.
Patchright to załatana, niewykrywalna wersja Playwrighta, która działa jako zamiennik: zmień import, zachowaj kod. Łatki są stosowane przed uruchomieniem procesu przeglądarki — usuwają flagi automatyzacji i wywołania Chrome DevTools Protocol, które pozwalają stronie zidentyfikować sesję Playwrighta w pierwszych kilku milisekundach. To, czego nie dotykają, to sieć. Każde pytanie dotyczące proxy Patchright sprowadza się do tego podziału i jednego szczegółu, który README ukrywa: zalecana przez projekt konfiguracja dla maksymalnej dyskrecji to trwały kontekst, który cicho zmienia sposób rotacji wyjść. To przewodnik skupiony na proxy — uruchomienie kontra kontekst, uwierzytelnione bramy, Docker i szczere spojrzenie na ograniczenia.
Instalacja i zamiennik proxy
Patchright jest dostępny dla Python, Node i .NET i łata tylko Chromium — Firefox i WebKit są wyraźnie nieobsługiwane. Zainstaluj go i pobierz prawdziwy Google Chrome zamiast dołączonego Chromium, co projekt zaleca dla dyskrecji:
pip install patchright
patchright install chrome
# Node: npm i patchright && npx patchright install chrome
API proxy to Playwright, niezmienione, ponieważ proxy to jedna z niewielu rzeczy, które Patchright celowo zostawia w spokoju. Dane uwierzytelniające umieszcza się w dedykowanych polach, nigdy wewnątrz URL serwera — dlatego uwierzytelnione proxy nie potrzebują tutaj rozszerzenia, w przeciwieństwie do Selenium czy surowego 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()
To cała odpowiedź na pytanie "czy Patchright obsługuje proxy": tak, identycznie jak w Playwright, w tym lista bypass i dziwactwo Chromium, że adresy loopback omijają proxy całkowicie — więc testowanie na lokalnym serwerze mock zawsze będzie wyglądać, jakby proxy było ignorowane. Jeśli jesteś nowy w modelu podstawowym, nasz przewodnik integracji proxy Playwright obejmuje podstawowe zachowanie, a mapa proxy frameworków anty-detekcyjnych porównuje, które stosy akceptują dane uwierzytelniające natywnie.
Proxy na kontekst i globalny stub
Konteksty to tania jednostka rotacji: oddzielne ciasteczka, magazyn i pamięć podręczna, tworzone w milisekundach zamiast sekund, które kosztuje uruchomienie przeglądarki. Każdy z nich przyjmuje własną opcję proxy, więc jeden proces może mieć tożsamość amerykańską i niemiecką jednocześnie. Jest jeden udokumentowany problem Playwright, który tutaj zaskakuje — przeglądarka musi być uruchomiona z globalnym proxy, aby proxy na kontekst działały na Chromium. Jeśli każdy kontekst je nadpisuje, globalna wartość nigdy nie jest używana i może być dowolnym ciągiem zastępczym:
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();
})();
Skierowany na obracającą się bramę, każdy kontekst wychodzi z innego adresu w puli rezydencjalnej 90M+, bez zarządzania listą po Twojej stronie — to właśnie robią rotacyjne proxy po stronie serwera. Zwróć uwagę, gdzie w tym fragmencie znajdują się kontrolki geograficzne i sesyjne: w nazwie użytkownika, a nie w niestandardowym nagłówku. To ma większe znaczenie w Patchright niż w zwykłym Playwright, ponieważ własne wytyczne projektu to unikanie niestandardowych nagłówków i nadpisywania user-agent, ponieważ wstrzyknięte wartości same w sobie są powierzchnią detekcji. Kontrola parametrów nazwy użytkownika utrzymuje kształt żądania przeglądarki nienaruszony.

Kompromis z trwałym kontekstem
Zalecana przez Patchright konfiguracja stealth to nie launch(). To launch_persistent_context() z prawdziwym kanałem Chrome, katalogiem danych użytkownika, bez nadpisywania widoku i w trybie z widokiem — i wyraźnie bez niestandardowych nagłówków czy fałszywego user-agenta. Ta konfiguracja również zachowuje wszelkie ciasteczka zwolnienia, które wyzwanie Ci przekazuje, więc rozwiązane wyzwanie jest ponownie używalne w kolejnych uruchomieniach. Konsekwencja proxy jest strukturalna: trwały kontekst jest kontekstem. Nie ma newContext(), aby powiesić na nim drugie proxy, więc jeden proces równa się jednej tożsamości wyjścia.
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()
Więc rotacja staje się decyzją na poziomie procesu: jeden katalog profilu na tożsamość, jedna przypięta sesja do niego, i pula pracowników zamiast pętli kontekstów. Utrzymuj stabilność parowania — profil, który zgromadził ciasteczka za włoskim wyjściem, a potem pojawia się za brazylijskim, to sprzeczność, której żadna łatka CDP nie ukryje. Praktyczna zasada: nazwij katalog po identyfikatorze sesji, usuń katalog, gdy spalisz sesję, i nigdy nie dziel profilu między dwa wyjścia.
Uruchamianie Patchright w Dockerze za proxy
Konteneryzacja przeglądarki stealth ma dwie pułapki, a obie mają konsekwencje dla proxy. Pierwsza to --no-sandbox: zwykłe rozwiązanie dla Chrome odmawiającego uruchomienia jako root i flaga, którą chętnie czytają dostawcy anty-botów. Uruchom jako użytkownik nie-root. Druga to tryb bezgłowy — projekt zaleca z widokiem, więc użyj wirtualnego wyświetlacza zamiast sięgać po przełącznik bezgłowy:
# 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
--ipc=host i większy /dev/shm to standardowe poprawki Chromium-w-Dockerze dla awarii kart pod obciążeniem, prosto z dokumentacji kontenerów Playwright. Jedna pułapka specyficzna dla proxy: jeśli uruchamiasz lokalny przekaźnik, aby dodać dane uwierzytelniające do punktu końcowego SOCKS5, 127.0.0.1 wewnątrz kontenera to kontener, a nie Twój host. Albo umieść przekaźnik w tym samym kontenerze, adresuj hosta wyraźnie, albo uruchom przekaźnik jako sidecar w sieci współdzielonej. I trzymaj katalog profilu na woluminie, jeśli używasz trwałych kontekstów, w przeciwnym razie każde ponowne uruchomienie kontenera wyrzuca ciasteczka zwolnienia, za które zapłaciłeś przepustowością.
Co obejmują łatki, a czego nigdy nie będą
Warto wiedzieć dokładnie, co kupujesz. Główna poprawka Patchright to wyciek Runtime.enable — uruchamia JavaScript w izolowanych kontekstach wykonawczych zamiast włączać domenę, która zdradza grę. Wyłącza API konsoli, aby zamknąć Console.enable (więc logowanie page.on("console") znika, co jest realnym kosztem, gdy debugujesz awarię proxy). Przepisuje domyślne flagi Playwright: dodaje --disable-blink-features=AutomationControlled, usuwa --enable-automation, i przywraca --disable-popup-blocking, --disable-component-update, --disable-default-apps i --disable-extensions. Sięga również do zamkniętych korzeni cieni z użyciem zwykłych lokalizatorów.
Przeczytaj tę listę flag jako pozycję na liście przepustowości. Przywracanie aktualizacji komponentów i domyślnych aplikacji oznacza przeglądarkę, która dzwoni do domu w tle — przez Twoje mierzone wyjście. Zmierz transfer sesji przed skalowaniem i zablokuj typy zasobów obrazów, czcionek i mediów w kontekście, aby utrzymać koszt na stronę na niskim poziomie. Żadne z tego nie dotyka drugiej ściany: załatana przeglądarka na spalonym IP centrum danych to wciąż spalone IP, a żądanie jest odrzucane na podstawie reputacji, zanim jakakolwiek z tych sprytnych rzeczy zostanie oceniona. Sprawdź adres za pomocą darmowego sprawdzacza jakości IP zanim dojdziesz do wniosku, że łatki zawiodły, i umieść proxy rezydencjalne pod przeglądarką, aby dwie warstwy rozwiązywały różne problemy.

Często zadawane pytania
Jak ustawić proxy w Patchright?
Dokładnie tak jak w Playwright: przekaż proxy={"server": "http://host:port", "username": "USER", "password": "PASS"} do chromium.launch(), launch_persistent_context() lub new_context(). Patchright nie łata warstwy proxy, więc każde zachowanie upstream — lista bypass, wyjątek loopback — działa bez zmian.
Czy Patchright obsługuje uwierzytelnianie proxy SOCKS5?
Nie, i to jest ograniczenie Chromium, a nie Patchright: Chromium nie ma mechanizmu dla poświadczeń SOCKS, więc uwierzytelnione punkty końcowe SOCKS5 zawodzą. Użyj portu HTTP tej samej bramy z polami nazwy użytkownika i hasła, lub uwierzytelniaj przez białą listę IP i zachowaj schemat SOCKS5 — każdy plan QuantumProxies obsługuje białą listę jako alternatywę dla user:pass. Pełen zestaw obejść znajduje się w naszym przewodniku uwierzytelniania proxy SOCKS5 Playwright, który działa tutaj bez zmian.
Czy Patchright może używać innego proxy na kontekst?
Tak, jeśli uruchomiłeś przeglądarkę z globalną wartością proxy — nawet zastępczą — ponieważ Chromium włącza proxy na kontekst tylko wtedy, gdy jedno jest obecne przy uruchomieniu. Wyjątkiem jest konfiguracja trwałego kontekstu, którą Patchright zaleca dla dyskrecji: to daje Ci jeden kontekst, więc rotacja oznacza osobny proces z własnym katalogiem profilu.
Czy Patchright jest tylko dla Chromium?
Tak. Projekt jasno stwierdza, że tylko przeglądarki oparte na Chromium są łatane; Firefox i WebKit są nieobsługiwane. Jeśli potrzebujesz stealth dla silnika Firefox z geo pochodzącym z wyjścia proxy, to inne narzędzie — zobacz nasz przewodnik po proxy i geoip Camoufox.
Czy nadal jestem blokowany z Patchright?
Na trudnych celach, tak. Niezależne testy pokazują, że tryb bezgłowy nadal wycieka sygnał HeadlessChrome, a strony z wyzwaniami, które załatana przeglądarka osiąga, ale nie może rozwiązać. Łatki zamykają tanie kontrole automatyzacji; reputacja IP, odciski palców TLS i rozwiązywanie wyzwań to oddzielne problemy, które wymagają oddzielnych rozwiązań.
Traktuj Patchright jako to, czym jest: bardzo dobre rozwiązanie dla jednej konkretnej klasy wycieków, dostarczone bez konieczności przepisywania linii Playwright. Połącz go z wyjściami, które są czyste, stabilne tam, gdzie tożsamość ma znaczenie, i zweryfikowane przed uruchomieniem — wtedy pozostałe niepowodzenia naprawdę dotyczą celu, a nie Twojej konfiguracji. To jest techniczne wskazówki, a nie porada prawna: automatyzuj zgodnie z prawem i warunkami strony.