Konfiguracja 4G proxy w Puppeteer to jeden z tych tematów, które na pierwszy rzut oka wyglądają prosto, ale w praktyce potrafią zjeść kilka godzin debugowania. Dostajesz blokadę po 30 requestach, Twój headless browser zwraca CAPTCHA na każdej stronie, albo po prostu Twój IP trafia na czarną listę zanim zdążysz zebrać cokolwiek użytecznego. W tym przewodniku nauczysz się:
- Jak podłączyć mobilne 4G proxy do Puppeteer w Node.js
- Jak skonfigurować rotację IP, żeby omijać detekcję
- Jak weryfikować, że Twój proxy działa poprawnie przed uruchomieniem scrapera
- Jakie ustawienia Puppeteer zmniejszają ryzyko wykrycia bota
W tym przewodniku znajdziesz konkretny kod, przykłady konfiguracji i wskazówki oparte na naszym doświadczeniu z infrastrukturą mobilnych proxy w Polsce.

Dlaczego 4G proxy, a nie datacenter?
Zanim przejdziemy do kodu, warto zrozumieć, dlaczego typ proxy ma znaczenie. Większość scraperów zaczyna od tanich proxy z datacenter. I działa, dopóki nie zaczyna scrapeować Allegro, Instagrama, Google albo jakiejkolwiek strony z porządnym systemem anty-botowym.
Problem z proxy datacenter jest prosty: ich adresy IP są publiczne, sklasyfikowane i często już na czarnych listach. Serwisy jak Cloudflare i PerimeterX znają każdy zakres ASN popularnych providerów hostingowych. Twój request wygląda jak robot, bo pochodzi z serwerowni, nie z telefonu komórkowego.
Key takeaway: Mobilne proxy 4G działają na prawdziwych kartach SIM podłączonych do fizycznych modemów LTE. Twój ruch wygląda identycznie jak ruch milionów użytkowników smartfonów w Polsce. Strony docelowe nie mają powodu, żeby Cię blokować.
Nasza infrastruktura w Proxy Poland opiera się na prawdziwych modemach LTE 4G/5G z polskimi kartami SIM. Adresy IP wychodzą przez CGNAT operatora, więc jeden adres IP dzielą tysiące prawdziwych użytkowników. To sprawia, że blokowanie tego IP oznaczałoby zablokowanie całej sieci mobilnej, co żaden serwis nie zrobi.
- Datacenter proxy: ASN serwerowni, łatwe do wykrycia, często już na blacklistach
- Residential proxy: prawdziwe IP, ale wolne i nieprzewidywalne
- 4G mobile proxy: najwyższy poziom zaufania, stałe łącze, rotacja IP w 2 sekundy
Wymagania wstępne i instalacja
Zakładam, że masz już Node.js zainstalowany w wersji 18 lub nowszej. Puppeteer działa najlepiej na Node 18+, a starsze wersje mogą powodować problemy z niektórymi wersjami Chromium.
Instalacja Puppeteer
Zacznij od nowego projektu Node.js:
- Utwórz folder projektu:
mkdir puppeteer-proxy && cd puppeteer-proxy - Zainicjalizuj projekt:
npm init -y - Zainstaluj Puppeteer:
npm install puppeteer - Opcjonalnie zainstaluj
puppeteer-extraipuppeteer-extra-plugin-stealthdla lepszego maskowania
Jeśli chcesz korzystać z trybu stealth (zdecydowanie polecamy), dodaj:
npm install puppeteer-extra puppeteer-extra-plugin-stealth
Dane do proxy
Z Proxy Poland otrzymujesz cztery dane potrzebne do konfiguracji:
- Host: adres serwera proxy (np.
pl.proxy-poland.com) - Port: numer portu przypisanego do Twojego modemu
- Login: Twoja nazwa użytkownika
- Hasło: Twoje hasło do proxy
Wszystkie te dane znajdziesz w panelu klienta po zakupie portu. Masz też dostęp do API rotacji, które omówimy w dalszej części tego przewodnika.
Podstawowa konfiguracja proxy w Puppeteer
Puppeteer obsługuje proxy przez argument --proxy-server przekazywany do przeglądarki. To najbardziej podstawowa metoda i działa zarówno z HTTP proxy, jak i SOCKS5.
Oto minimalna konfiguracja z proxy HTTP:
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({
args: ['--proxy-server=http://pl.proxy-poland.com:PORT']
});
I wersja z SOCKS5, która daje nieco lepszą kompatybilność z niektórymi stronami:
args: ['--proxy-server=socks5://pl.proxy-poland.com:PORT']
Pełny przykład z nawigacją
Kompletny skrypt, który otwiera stronę przez proxy i sprawdza Twój adres IP:
const puppeteer = require('puppeteer');
async function main() {
const browser = await puppeteer.launch({
headless: true,
args: [
'--proxy-server=http://pl.proxy-poland.com:PORT',
'--no-sandbox',
'--disable-setuid-sandbox'
]
});
const page = await browser.newPage();
await page.goto('https://api.ipify.org/?format=json');
const content = await page.content();
console.log(content);
await browser.close();
}
main();
Key takeaway: Przekazujesz adres proxy raz przy uruchomieniu przeglądarki, a cały ruch ze wszystkich zakładek automatycznie idzie przez ten proxy. Nie musisz konfigurować każdej strony osobno.

Uwierzytelnianie proxy: user:pass vs whitelist IP
Proxy z datacenter często używają whitelisty IP do uwierzytelniania. Mobilne proxy zazwyczaj wymagają loginu i hasła, bo Twój własny IP może się zmieniać. Puppeteer obsługuje oba sposoby.
Uwierzytelnianie przez user:pass
Po ustawieniu --proxy-server musisz jeszcze obsłużyć żądanie uwierzytelnienia. Puppeteer ma do tego metodę page.authenticate():
await page.authenticate({
username: 'twoj_login',
password: 'twoje_haslo'
});
Wywołaj tę metodę przed każdym page.goto(). Możesz też wbudować dane logowania bezpośrednio w URL proxy:
--proxy-server=http://twoj_login:twoje_haslo@pl.proxy-poland.com:PORT
Ta metoda jest wygodna, ale pamiętaj, żeby nie commitować haseł do repozytorium. Użyj zmiennych środowiskowych lub pliku .env.
Bezpieczne przechowywanie danych proxy
- Zainstaluj pakiet
dotenv:npm install dotenv - Utwórz plik
.envz danymi:PROXY_HOST=pl.proxy-poland.com,PROXY_PORT=12345, etc. - Dodaj
.envdo.gitignore - Wczytuj zmienne na początku skryptu:
require('dotenv').config()
Przy pracy z wieloma portami (np. gdy scrapujesz równolegle na kilku instancjach Puppeteer), przechowuj dane w tablicy i przypisuj porty do instancji dynamicznie.
Rotacja IP i zarządzanie sesjami
To jest moment, gdzie mobilne proxy naprawdę błyszczą. W Proxy Poland możesz zmienić IP w 2 sekundy przez wywołanie API. Nie musisz restartować przeglądarki, nie tracisz ciasteczek sesji. Po prostu wysyłasz request do endpointu rotacji i Twój modem dostaje nowy adres IP od operatora.
Rotacja IP przez API
W Node.js możesz wywołać rotację za pomocą pakietu axios lub wbudowanego fetch:
const axios = require('axios');
async function rotateIP() {
await axios.get('https://panel.proxy-poland.com/api/rotate?port=PORT&token=TWOJ_TOKEN');
// Poczekaj 3 sekundy na przydzielenie nowego IP
await new Promise(resolve => setTimeout(resolve, 3000));
}
Dobrą praktyką jest rotować IP co określoną liczbę requestów lub gdy strona zwróci kod 429 (Too Many Requests).
Strategia zarządzania sesjami
- Scraping bez logowania: rotuj IP co 10-20 requestów dla maksymalnego bezpieczeństwa
- Scraping z sesją (zalogowany użytkownik): trzymaj stały IP przez całą sesję, rotuj dopiero po wylogowaniu
- Automatyczna rotacja: włącz auto-rotację w panelu i ustaw interwał co 10 lub 30 minut
Pamiętaj: jeśli korzystasz z sesji i ciasteczek, zmiana IP w trakcie sesji może wylogować Cię ze strony. Planuj rotacje strategicznie, między sesjami a nie w ich trakcie.
Ustawienia stealth w Puppeteer
Sam proxy to nie wszystko. Headless Chromium ma dziesiątki fingerprints, które zdradzają, że to bot. Strony takie jak Cloudflare, DataDome i PerimeterX analizują właściwości przeglądarki, nie tylko adres IP.
Plugin puppeteer-extra-plugin-stealth
Najprostsze rozwiązanie to plugin stealth, który automatycznie łata największe luki:
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
headless: true,
args: ['--proxy-server=http://pl.proxy-poland.com:PORT']
});
Dodatkowe ustawienia zmniejszające ryzyko wykrycia
- Ustaw realistyczny
userAgentpasujący do mobilnego Chrome na Androidzie - Ustaw viewport zbliżony do rozdzielczości telefonu:
{ width: 390, height: 844 } - Dodaj losowe opóźnienia między requestami: 1-3 sekundy zamiast bombardowania strony
- Wyłącz automatyczne ładowanie zasobów (obrazy, fonty) jeśli scraperujesz tylko dane tekstowe
Key takeaway: Połączenie mobilnego IP z właściwym user-agentem mobilnym tworzy spójny profil. Strona widzi ruch z polskiej sieci komórkowej od przeglądarki mobilnej. To najlepsze możliwe maskowanie.
W naszych testach kombinacja 4G proxy z Proxy Poland i pluginem stealth dała 0% detekcji na 500 kolejnych requestach do stron z Cloudflare w trybie "Under Attack Mode".

Testowanie i weryfikacja konfiguracji
Zanim uruchomisz scraper na produkcji, poświęć 10 minut na weryfikację całej konfiguracji. To zaoszczędzi Ci godzin debugowania.
Sprawdzenie adresu IP
Najprostsza weryfikacja to sprawdzenie, czy Puppeteer faktycznie wysyła ruch przez proxy. Odwiedź przez Puppeteer stronę What is My IP lub API, które zwraca Twój publiczny adres IP. Powinien to być adres z sieci mobilnej, nie Twój własny IP.
Test wykrycia przez strony anty-botowe
Przetestuj swoją konfigurację na kilku serwisach diagnostycznych:
- Odwiedź przez Puppeteer stronę sprawdzającą nagłówki HTTP. Sprawdź analizator nagłówków HTTP, żeby zobaczyć co strony widzą w Twoich requestach.
- Sprawdź czy nie ma wycieków DNS przy pomocy testu szczelności DNS
- Zmierz latencję proxy przez test prędkości proxy. Mobilne 4G proxy typowo dają 50-150ms latencji w Polsce.
Obsługa błędów w produkcji
- Dodaj try/catch wokół każdego
page.goto() - Obsługuj kody 403 i 429: przy 429 zrotuj IP i ponów request po 5 sekundach
- Loguj błędy do pliku z timestampem, żebyś wiedział, kiedy proxy przestaje działać
- Dodaj timeout do
page.goto():{ waitUntil: 'networkidle2', timeout: 30000 }
Dobrze napisany scraper z Puppeteer i mobilnym proxy powinien działać stabilnie przez godziny bez interwencji. Jeśli dostajesz błędy częściej niż co 100 requestów, sprawdź konfigurację proxy i ustawienia stealth.
Często zadawane pytania
Czy mogę używać jednego proxy w wielu instancjach Puppeteer jednocześnie?
Technicznie możesz, ale to zmniejszy efektywność. Każda instancja Puppeteer z tym samym IP wygląda jak jeden użytkownik, który robi dużo rzeczy naraz. Jeśli scraperujesz równolegle, kup kilka portów w Proxy Poland i przypisz każdej instancji osobny port. Ceny zaczynają się od 11 dolarów za dzień za port.
Jaka jest różnica między HTTP a SOCKS5 proxy w Puppeteer?
HTTP proxy działa tylko z ruchem HTTP i HTTPS. SOCKS5 jest protokołem niższego poziomu i obsługuje każdy typ ruchu TCP, w tym WebSockets. W praktyce przy scrapeowaniu stron WWW różnica jest minimalna. SOCKS5 może być lepszy jeśli scraperujesz strony korzystające intensywnie z WebSocketów. Puppeteer obsługuje oba protokoły przez ten sam argument --proxy-server.
Dlaczego Puppeteer nadal dostaje CAPTCHA mimo proxy?
Sam proxy nie wystarczy. Musisz też zadbać o fingerprint przeglądarki. Headless Chrome ma specyficzne właściwości, które strony wykrywają niezależnie od IP: brak plugins, specyficzne wartości navigator, brak WebGL fingerprint. Zainstaluj puppeteer-extra-plugin-stealth i ustaw mobilny user-agent pasujący do polskiego operatora komórkowego. Jeśli nadal dostajesz CAPTCHA, sprawdź czy Twój proxy ma włączoną rotację IP.
Ile czasu zajmuje zmiana IP przy rotacji?
W Proxy Poland rotacja IP zajmuje około 2-3 sekund od momentu wywołania API. Modem rozłącza się od sieci 4G i nawiązuje nowe połączenie, dostając nowy adres IP od operatora przez CGNAT. W tym czasie requesty przez proxy mogą być niedostępne przez 2-3 sekundy, więc dodaj odpowiednie opóźnienie w kodzie przed następnym requestem.
Konfiguracja 4G proxy w Puppeteer sprowadza się do trzech kroków: ustawienia argumentu --proxy-server, obsługi uwierzytelnienia przez page.authenticate() i włączenia stealth mode. Ale to, co naprawdę robi różnicę, to jakość proxy. Mobilne 4G proxy na prawdziwych kartach SIM dają poziom zaufania, którego żadne datacenter proxy nie jest w stanie osiągnąć. Twój ruch wygląda jak ruch zwykłego użytkownika z Polsatu lub Orange, nie jak serwer w data center we Frankfurcie. W 2026 roku, gdy systemy anty-botowe są coraz inteligentniejsze, to właśnie ta różnica decyduje o tym, czy Twój scraper działa przez godziny czy zostaje zablokowany po 30 requestach. Przetestuj konfigurację na darmowym 1-godzinnym trial bez karty kredytowej i przekonaj się sam. Zobacz plany i cennik Proxy Poland i uruchom swój scraper na prawdziwych polskich 4G proxy już dziś.
