# Konfiguracja proxy w Playwright z rotującymi IP rezydencjalnymi (Python i Node.js)

> Konfiguracja proxy w Playwright w Python i Node.js: uwierzytelnione proxy rezydencjalne na przeglądarkę lub kontekst, sesje klejące, lżejsze strony.

- URL: https://crawlrelay.com/pl/docs/playwright/
- Ostatnia aktualizacja: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Podaj proxy rezydencjalne przy uruchomieniu dla jednego wyjścia na przeglądarkę lub na kontekst dla jednego kraju albo jednej sesji sticky na kontekst. Następnie ogranicz ruch, blokując to, czego nie potrzebujesz.

**Szybka odpowiedź — Jak używać uwierzytelnionego proxy rezydencjalnego w Playwright?**

Przekaż obiekt `proxy` z `server`, `username` i `password` do `launch()` lub do `new_context()`: `server` to `http://gw.crawlrelay.com:7777`, a dane logowania wpisz w osobne pola, nigdy w URL serwera. Przy **CrawlRelay** mobilnych proxy 4G umieść kraj i ID sesji w nazwie użytkownika, aby nadać każdemu kontekstowi własne wyjście. Ruch kosztuje 0,50 USD/GB od 50 GB. Płatność w kryptowalucie, bez KYC.

## Szybka konfiguracja Playwright

| Atrybut | Wartość |
| --- | --- |
| Opcja proxy | `{"server": "http://gw.crawlrelay.com:7777", "username": ..., "password": ...}` |
| Gdzie | `launch(proxy=...)` dla całej przeglądarki lub `new_context(proxy=...)` na kontekst |
| Port | Port HTTP 7777; strony HTTPS korzystają z CONNECT |
| SOCKS5 | Chromium nie obsługuje uwierzytelniania SOCKS5: użyj portu HTTP |
| Jeden IP na kontekst | `-session-<id>-ttl-<minutes>` w nazwie użytkownika kontekstu |
| Typowy koszt strony | Około 2 MB z każdym zasobem; kilkaset KB przy zablokowanych obrazach, czcionkach i mediach |

## Jak nadać każdemu kontekstowi przeglądarki własny kraj lub sesję?

Utwórz jeden kontekst na kraj lub na sesję sticky. Konteksty są tanie w porównaniu do przeglądarek, a każdy przechowuje własne ciasteczka, magazyn i dane proxy rezydencjalnego. Dopasuj locale kontekstu do kraju wyjścia, aby witryna widziała spójnego użytkownika.

*Python (sync API): jeden kontekst na kraj*

```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()
```

## Jak ustawić proxy rezydencjalne w Playwright dla Node.js i ograniczyć ruch?

Opcja ma ten sam format w Node.js. Większość wagi renderowanej strony to obrazy, czcionki i media: mediana strony ważyła 2 164 KB na urządzeniach mobilnych według HTTP Archive Web Almanac 2025. Jeśli potrzebujesz tylko tekstu i linków, anuluj takie żądania w handlerze trasy.

*Node.js: przy starcie sticky session, zablokowane zasoby o dużym obciążeniu*

```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();
```

## Jak uruchomić wiele stron równolegle z asyncio?

Użyj asynchronicznego API z ustalonym pulą kontekstów. Każdy kontekst utrzymuje jedną sticky session przez cały czas życia, dzięki czemu strona widzi kilku stałych odwiedzających zamiast jednego IP na żądanie. Zmieniaj kontekst z nowym ID sesji po określonej liczbie stron lub po wystąpieniu błędu.

*Python (async API): pula sticky kontekstów*

```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/"]))
```

## Dlaczego pojawia się ERR_TUNNEL_CONNECTION_FAILED lub ERR_PROXY_CONNECTION_FAILED?

- **net::ERR_TUNNEL_CONNECTION_FAILED** oznacza, że proxy nie zaakceptowało żądania CONNECT. Najczęściej dane uwierzytelniające wpisano w `server` zamiast w `username` i `password`, więc Chromium ich nie wysłało. Zobacz [błąd tunelu](https://crawlrelay.com/pl/docs/errors/err-tunnel-connection-failed/)].
- **net::ERR_PROXY_CONNECTION_FAILED** oznacza, że przeglądarka nigdy nie dotarła do bramy: literówka w hoście lub porcie albo sieć blokuje port. Zobacz [błąd połączenia proxy](https://crawlrelay.com/pl/docs/errors/err-proxy-connection-failed/)].
- **Przekroczono limit czasu 30000ms** na `goto` zwykle oznacza, że czekasz na `load` lub `networkidle` na stronie, która ciągle ładuje trackery. Poczekaj na `domcontentloaded`, a potem na potrzebny selektor.

## Czego scraper Playwright nie powinien robić?

Używaj Playwright do renderowania publicznych stron wymagających JavaScript, nie do podszywania się pod ludzi. Polityka akceptowalnego użytkowania CrawlRelay [Acceptable Use Policy](https://crawlrelay.com/pl/acceptable-use/) zabrania używania przeglądarek przez naszą bramę do masowego tworzenia kont, przejmowania kont, automatycznego rozwiązywania CAPTCHA lub omijania celowych blokad strony. Nie opisujemy wtyczek stealth ani spoofingu odcisków palców. Jeśli strona sprawdza Twoją przeglądarkę, zwolnij tempo, sprawdź jej robots.txt i warunki oraz poproś o dostęp lub użyj jej API.

## Playwright i proxy: pytania

### Czy mogę użyć innego proxy dla każdego kontekstu Playwright?

Tak. Przekaż `proxy` do `browser.new_context()` w Pythonie lub `browser.newContext()` w Node.js. Każdy kontekst ma wtedy własne wyjście, ciasteczka i pamięć. Bardzo stare wersje Playwright na Windows wymagały proxy przy starcie; jeśli masz ten błąd, uruchom z dowolnym proxy zastępczym i ustaw właściwe dla każdego kontekstu.

### Czy Playwright obsługuje proxy SOCKS5 z uwierzytelnianiem?

Nie w Chromium, które nie obsługuje uwierzytelniania użytkownika i hasła w SOCKS5. Używaj portu HTTP bramy (7777): obsługuje on strony HTTPS przez CONNECT tunnel i wspiera użytkownika oraz hasło we wszystkich silnikach przeglądarek obsługiwanych przez Playwright.

### Jak sprawdzić, jakie IP i kraj używa strona Playwright?

Otwórz `https://api.ipify.org` w tym samym kontekście przed stroną docelową i odczytaj tekst treści, tak jak w pierwszym przykładzie. Pamiętaj, że sticky session utrzymuje to IP tylko dopóki urządzenie proxy rezydencjalne jest online; zapisz IP na początku każdego kontekstu, aby zauważyć zmiany.

### Ile ruchu sieciowego zużywa strona Playwright przez proxy?

Wszystko jest rozliczane: HTML, skrypty, style, obrazy, czcionki i wywołania API. Pełna strona to około 2 MB mediany; blokowanie obrazów, czcionek i mediów często tnie to do kilkuset kilobajtów. Zmierz swoje realne strony sumując rozmiar odpowiedzi w obsłudze `response` dla 50 stron.

### Czy lepiej używać przeglądarki headless czy z interfejsem do scrapowania?

Headless to standard dla serwerów i zużywa mniej zasobów. Używaj przeglądarki z GUI tylko do debugowania, co pokazuje strona. Żadne z nich nie zmienia zasad: renderuj publiczne strony w kulturalnym tempie i szanuj robots.txt oraz warunki serwisu.

**Renderuj publiczne strony przez proxy rezydencjalne** 5,94 USD dla 10 GB, 0,50 USD/GB od 50 GB. [Zobacz ceny](https://crawlrelay.com/pl/pricing/) · [Przewodnik Puppeteer](https://crawlrelay.com/pl/docs/puppeteer/)

---

CrawlRelay: CrawlRelay to serwis proxy rezydencjalne i mobilne proxy 4G/5G z rotacją, stworzony dla programistów i potoków danych AI: ruch bez wygasania w modelu pay-as-you-go od 0,50 USD/GB, płatny w kryptowalutach, bez konieczności przesyłania dokumentów. Bez KYC — brak dowodu, selfie i dokumentów. Płać w kryptowalutach.
