Integracja Proxy z Playwright: Przeglądarka, Kontekst i Rotacja

Playwright to jedyne główne środowisko przeglądarkowe, w którym uwierzytelnione proxy działają bez problemu — dane uwierzytelniające są pełnoprawnymi polami konfiguracyjnymi. Klucz tkwi w kontekstach: jedna przeglądarka, inny adres IP wyjściowy dla każdego zadania. Oto pełny wzorzec.

Playwright to jedyne główne środowisko automatyzacji przeglądarek, w którym uwierzytelnione proxy są pełnoprawnym elementem: nazwa użytkownika i hasło to zwykłe pola konfiguracyjne, bez rozszerzeń, bez okien dialogowych uwierzytelniania, bez bibliotek opakowujących. Dzięki temu podstawowa konfiguracja proxy Playwright to pięć linii kodu w Node lub Python. Prawdziwa przewaga leży poziom głębiej — proxy na poziomie kontekstu pozwalają na uruchomienie wielu izolowanych sesji w jednym procesie przeglądarki, każda z własnym adresem IP wyjściowym, co jest najtańszą architekturą rotacji oferowaną przez jakiekolwiek środowisko. Ten przewodnik obejmuje obie warstwy, pułapki SOCKS5 i localhost, co proxy robi z rachunkiem za przepustowość i gdzie ukrywanie naprawdę się kończy.

Proxy Playwright przy uruchomieniu przeglądarki

Przekaż obiekt proxy do launch(), a każda strona w przeglądarce będzie przez niego kierowana. Zwróć uwagę na kształt: URL serwera nie zawiera danych uwierzytelniających — trafiają one do oddzielnych pól username i password, co pozwala Playwright unikać problemu z okienkami uwierzytelniania, który nęka Selenium i Puppeteer:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
    proxy: {
      server: 'http://gate.quantumproxies.io:PORT',
      username: 'USER',
      password: 'PASS',
    },
  });
  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  console.log(await page.textContent('body')); // proxy exit IP
  await browser.close();
})();

API Python odzwierciedla to dokładnie:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": "http://gate.quantumproxies.io:PORT",
        "username": "USER",
        "password": "PASS",
    })
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.text_content("body"))
    browser.close()

Jeśli Twoje dane uwierzytelniające znajdują się w standardowym ciągu http://user:pass@host:port, rozdziel go za pomocą klasy URL (new URL() w Node, urllib.parse w Python) zamiast manipulacji ciągiem — hasła ze znakami specjalnymi przetrwają w ten sposób. Jedno zastrzeżenie dotyczące testów: use.proxy w playwright.config.ts obejmuje testy, ale istnieją długotrwałe raporty o ignorowaniu ustawień proxy na poziomie konfiguracji w mieszanych konfiguracjach, więc dla skryptów scrapingowych zawsze ustawiaj proxy przy launch() lub bezpośrednio w kontekście.

Proxy na poziomie kontekstu: rotacja bez nowych przeglądarek

BrowserContext to izolowana przeglądarka w przeglądarce: oddzielne ciasteczka, pamięć i cache, dzielące tylko proces. Konteksty akceptują własną opcję proxy, a ich tworzenie zajmuje milisekundy w porównaniu do sekund dla pełnego uruchomienia — więc wzorzec rotacji to jedna przeglądarka, kontekst na zadanie:

const { chromium } = require('playwright');

const PROXY = {
  server: 'http://gate.quantumproxies.io:PORT',
  username: 'USER',
  password: 'PASS',
};

(async () => {
  const browser = await chromium.launch();
  const urls = ['https://example.com/a', 'https://example.com/b'];

  for (const url of urls) {
    const context = await browser.newContext({ proxy: PROXY });
    const page = await context.newPage();
    try {
      await page.goto(url, { timeout: 30000 });
      // ...extract...
    } finally {
      await context.close(); // frees cookies, cache, session
    }
  }
  await browser.close();
})();

Skierowane na rotacyjny bramę, każdy kontekst wychodzi z innego IP w puli 90M+ adresów rezydencyjnych bez zarządzania listą — to właśnie robią rotacyjne proxy po stronie serwera. Gdy zadanie wymaga tego samego IP na kilku stronach (logowanie plus zakup), zażądaj sesji lepkiej poprzez parametry nazwy użytkownika, a wyjście utrzyma się na czas trwania okna sesji. Konteksty również izolują awarie: zablokowane wyjście umiera z jego kontekstem zamiast zatruwać całą przeglądarkę.

Ten sam wzorzec daje Ci darmowe geotargetowanie. Ponieważ proxy jest opcją kontekstu, jedna przeglądarka może jednocześnie posiadać kontekst USA, kontekst niemiecki i kontekst japoński — każdy widzi lokalne ceny, wyniki wyszukiwania i banery zgody z lokalnego IP wyjściowego. Dla porównania cen i weryfikacji reklam, to zastępuje trzy regiony chmurowe trzema liniami konfiguracji.

Diagram rotacji proxy Playwright: jeden proces przeglądarki z wieloma izolowanymi kontekstami, każdy kierowany przez inne rezydencyjne IP wyjściowe
Konteksty są jednostką rotacji Playwright: ten sam proces, oddzielna tożsamość, własne proxy. Uruchomienie kontekstu kosztuje milisekundy; przeglądarki kosztują sekundy.

SOCKS5, zasady omijania i pułapka localhost

Ogranicz przepustowość przed skalowaniem

Przeglądarka renderująca pobiera wszystko — obrazy, czcionki, analitykę, skrypty reklamowe — a przez mierzoną rezydencyjną transmisję płacisz za to wszystko. Blokowanie nieistotnych typów zasobów rutynowo zmniejsza transfer na stronę o połowę lub więcej, a routing Playwright sprawia, że to jednolinijkowiec w kontekście. Więcej wzorców w naszym przewodniku po zmniejszaniu kosztów przepustowości proxy:

await context.route('**/*', (route) => {
  const type = route.request().resourceType();
  if (type === 'image' || type === 'font' || type === 'media') {
    return route.abort();
  }
  return route.continue();
});

Zmierz efekt zamiast zakładać go: subskrybuj zdarzenia odpowiedzi kontekstu, sumuj rozmiary transferu dla próbki stron z i bez trasy, a otrzymasz rzeczywisty koszt GB na stronę — liczba, która decyduje, czy crawl miliona stron to błąd zaokrąglenia, czy linia budżetowa.

Ograniczenia ukrywania: czego proxy nie może naprawić

Bądź szczery co do pułapu. Rezydencyjne wyjście rozwiązuje reputację IP — pierwszy i największy filtr — ale Playwright nadal prezentuje sygnały automatyzacji powyżej warstwy sieciowej: dziwactwa renderowania bezgłowego, artefakty CDP i powierzchnie odcisków palców, które dostawcy antybotów badają bezpośrednio. Wtyczki ukrywające łatają niektóre sygnały i pozostają w tyle za aktualizacjami detektorów w innych; to wyścig zbrojeń, który dziedziczysz, a nie ustawienie, które włączasz. Pragmatyczny podział: uruchom Playwright przez rezydencyjne proxy dla długiego ogona normalnych stron, a naprawdę wrogie domeny kieruj przez Scraper API, które zarządza odciskami palców, renderowaniem i ponownymi próbami jako całym zadaniem i zwraca HTML, markdown lub ustrukturyzowany JSON. Twój kod Playwright nadal robi to, w czym jest wyjątkowo dobry — przepływy interakcji — podczas gdy zadania pobierania i parsowania przenoszą się do API. Ta sama kalkulacja dotyczy Puppeteer i Selenium; żadna zmiana środowiska nie rozwiązuje problemu z odciskami palców.

Diagram ścienny pokazujący, co naprawia proxy Playwright w porównaniu z tym, co nadal blokuje odcisk palca przeglądarki, z eskalacją do API scraper
Czyste IP przeprowadzą Cię przez pierwszą ścianę. Kontrole odcisków palców to druga — i punkt, w którym API przewyższa kolejną łatkę ukrywającą.

Często zadawane pytania

Jak ustawić proxy w Playwright Python?

Przekaż słownik proxy do launch(): p.chromium.launch(proxy={"server": "http://host:port", "username": "USER", "password": "PASS"}). Ten sam słownik działa na browser.new_context() dla routingu na poziomie kontekstu. Poświadczenia zawsze trafiają do oddzielnych pól, nigdy wewnątrz URL serwera.

Czy Playwright może używać innego proxy dla każdego kontekstu?

Tak — przekaż opcję proxy do każdego wywołania newContext(). Konteksty nie dzielą niczego poza procesem przeglądarki, więc dwa konteksty z różnymi proxy zachowują się jak dwie niepowiązane przeglądarki dla stron docelowych. To standardowy wzorzec rotacji: jedno uruchomienie, a następnie świeży kontekst na zadanie lub tożsamość.

Czy Playwright obsługuje uwierzytelnianie proxy SOCKS5?

Nie. Playwright przekazuje SOCKS5 do przeglądarki, a Chromium nie ma mechanizmu dla poświadczeń SOCKS, więc uwierzytelnione punkty końcowe SOCKS5 zawodzą. Użyj portu HTTP(S) tej samej bramy proxy z polami nazwy użytkownika i hasła, lub uwierzytelnij przez białą listę IP i zachowaj schemat SOCKS5.

Jaki jest poprawny format proxy Playwright?

Obiekt z polem server (scheme://host:port — http, https lub socks5) plus opcjonalne pola username, password i bypass. Nie umieszczaj poświadczeń wewnątrz URL serwera; Playwright oczekuje ich osobno, a hasła ze znakami specjalnymi przetrwają tylko w dedykowanych polach.

Dlaczego moje proxy Playwright nie działa na localhost?

Chromium pomija proxy dla adresów pętli zwrotnej domyślnie, więc żądania do localhost lub 127.0.0.1 idą bezpośrednio i wydają się ignorować Twoją konfigurację. Zweryfikuj proxy na zewnętrznym URL, takim jak httpbin.org/ip. W konfiguracjach testowych, również preferuj ustawienie proxy przy launch() zamiast polegać na opcjach pliku konfiguracyjnego.

Historia proxy Playwright jest najczystsza w ekosystemie: poświadczenia jako konfiguracja, konteksty jako jednostka rotacji, routing jako zawór przepustowości. Ustaw jakość IP pod spodem i środowisko zanika w tle — co jest dokładnie tym, co dobra infrastruktura powinna robić.

Skieruj Playwright na rezydencyjne proxy