# 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:

```bash
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:

```python
from patchright.sync_api import sync_playwright

PROXY = {
    "server": "http://residentialpremium.quantumproxies.io:8080",
    "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](https://quantumproxies.io/blog/playwright-proxy-integration) obejmuje podstawowe zachowanie, a [mapa proxy frameworków anty-detekcyjnych](https://quantumproxies.io/blog/anti-detect-frameworks-authenticated-proxies-map) 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:

```js
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://residentialpremium.quantumproxies.io:8080',
        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](https://quantumproxies.io/rotating-proxies) 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.

![Dwa sposoby korzystania z proxy w Patchright: uruchom przeglądarkę i daj każdemu kontekstowi własne proxy, aby szybko rotować, albo użyj trwałego kontekstu, który projekt zaleca dla trybu stealth i który ma dokładnie jeden kontekst, a więc jedno wyjście na proces. Karta zaznacza globalną zaślepkę proxy potrzebną do proxy na poziomie kontekstu.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785776555/blog/generated/qp-b10-009-diag1.png)
*Kompromis, którego nikt nie stwierdza: szybka rotacja żyje w kontekstach, maksymalna dyskrecja żyje w trwałym profilu — a trwały profil ma dokładnie jeden kontekst.*

## 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.

```python
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://residentialpremium.quantumproxies.io:8080",
            "username": "USER-country-it-sid-it01-ttl-30m",   # 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:

```bash
# 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](https://quantumproxies.io/ip-checker) zanim dojdziesz do wniosku, że łatki zawiodły, i umieść [proxy rezydencjalne](https://quantumproxies.io/residential-proxies) pod przeglądarką, aby dwie warstwy rozwiązywały różne problemy.

![Łatki Patchright przechodzą kontrolę automatyzacji, zamykając wyciek Runtime.enable i przepisując flagi uruchomienia, ale spalone wyjściowe IP zostaje odrzucone na podstawie reputacji, zanim cokolwiek z tego zostanie odczytane. Karta rozdziela dwa zadania: łatki decydują, co mówi przeglądarka, a proxy decyduje, skąd wydaje się ona pochodzić.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785776555/blog/generated/qp-b10-009-diag2.png)
*Łatki decydują, co przeglądarka mówi o sobie. Proxy decydują, skąd wydaje się pochodzić. Naprawienie jednego i ignorowanie drugiego nadal kończy się blokadą.*

## 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](https://quantumproxies.io/blog/playwright-socks5-proxy-authentication), 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](https://quantumproxies.io/blog/camoufox-proxy-geoip).

### 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.

[Umieść Patchright na czystych wyjściach rezydencjalnych](https://quantumproxies.io/residential-proxies)
