Jak skonfigurować proxy w Selenium (Python)

Selenium z proxy Prokso w Pythonie: --proxy-server dla Chrome, biała lista IP zamiast loginu i hasła, selenium-wire, jeden port na przeglądarkę.

Zaktualizowano · Redakcja Prokso

Dane do połączenia
Host
gw.prokso.com
Port
823 HTTP · 824 SOCKS5 — nowy IP przy każdym żądaniu · 10000–20000 stały IP na całą sesję, HTTP(S) i SOCKS5
Login i hasło
w panelu klienta, na stronie planu

Gotowe wiersze w potrzebnym formacie wygenerujesz w panelu klienta: wybierz kraj, typ IP i protokół.

W skrócie
  • Host gw.prokso.com, porty 823 (HTTP), 824 (SOCKS5), 10000–20000 (sesje sticky, HTTP lub SOCKS5)
  • Login i hasło znajdziesz w panelu klienta na stronie planu
  • Sprawdzaj IP w odpowiedzi na samo żądanie wysłane przez proxy: strona Mój IP w przeglądarce nie testuje Twojego skryptu

Instrukcja krok po kroku, jak podłączyć proxy Prokso w Selenium (Python). Zajmie to kilka minut.

Krok 1. Pobierz dane proxy z panelu klienta

Otwórz swój plan i skopiuj host gw.prokso.com, port, login i hasło. Port 823 to HTTP, a 824 to SOCKS5 (oba dają nowy IP przy każdym żądaniu); porty 10000–20000 utrzymują jeden IP (sesja sticky) do 120 minut i działają zarówno jako HTTP, jak i SOCKS5 (każdy port to osobny adres). Kraj ustawiasz w loginie: username__cr.ua.

Blok „Dostęp” na stronie planu: host, porty, login i hasło do linii proxy
Blok „Dostęp” na stronie planu: host, porty, login i hasło do linii proxy

Krok 2. Dodaj swój IP do białej listy IP

Chrome nie przyjmuje loginu i hasła w --proxy-server, więc najprościej otworzyć stronę planu w panelu klienta i w bloku „Biała lista IP (bez hasła)” dodać IP komputera lub serwera, na którym działa skrypt (do 5 adresów). Wtedy proxy wpuszcza Cię bez hasła.

Krok 3. Przekaż proxy do Chrome

Uruchom pip install selenium i ustaw proxy przez --proxy-server: host gw.prokso.com i port. Aby zachować jeden IP przez całą sesję przeglądarki, użyj portu sticky z zakresu 10000–20000 – wtedy strony nie będą się ładować z różnych IP.

# pip install selenium   (the computer's IP is added to the IP whitelist)
from selenium import webdriver
from selenium.webdriver.common.by import By

opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server=http://gw.prokso.com:10001")
driver = webdriver.Chrome(options=opts)
driver.get("https://api.ipify.org")
print(driver.find_element(By.TAG_NAME, "body").text)
driver.quit()

Krok 4. Jeśli potrzebujesz uwierzytelniania loginem i hasłem

Jeśli biała lista IP się nie sprawdza (np. IP Twojego serwera często się zmienia), możesz kierować ruch przez selenium-wire, który dodaje login i hasło za Ciebie. Pamiętaj, że ten projekt nie jest już rozwijany, więc może przestać działać w nowszych wersjach Selenium.

# pip install selenium-wire   (no longer maintained)
from seleniumwire import webdriver

sw = {"proxy": {"http": "http://USERNAME:PASSWORD@gw.prokso.com:823",
                "https": "http://USERNAME:PASSWORD@gw.prokso.com:823"}}
driver = webdriver.Chrome(seleniumwire_options=sw)
driver.get("https://api.ipify.org")
print(driver.page_source)
driver.quit()

Krok 5. Sprawdź, jaki IP widzi skrypt

Uruchom przykład: sterowany przez Selenium Chrome otwiera https://api.ipify.org, a skrypt wypisuje IP – powinien to być IP proxy. Twoja zwykła przeglądarka nie ma proxy, więc strona Mój IP pokaże w niej Twój własny adres.

Przykład uruchomienia: w wyniku widać IP proxy, a nie Twoje. Na stałym porcie adres się nie zmienia
Przykład uruchomienia: w wyniku widać IP proxy, a nie Twoje. Na stałym porcie adres się nie zmienia

Jeśli adres serwera się zmienia

Dostęp po IP jest wygodny, dopóki Twój komputer lub serwer ma stały adres zewnętrzny. Przy domowym internecie i niektórych serwerach w chmurze adres się zmienia, a proxy przestaje wpuszczać skrypt. Charakterystyczny objaw: wczoraj wszystko działało, a dziś Chrome pokazuje okno logowania. Sprawdź aktualny adres poleceniem curl https://prokso.com/ip bez proxy i zaktualizuj go na stronie planu.

Jak zmniejszyć zużycie transferu

Wyłącz ładowanie obrazów w ustawieniach Chrome i uruchamiaj przeglądarkę bez okna: obrazy nie są potrzebne do zbierania danych.

opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server=http://gw.prokso.com:10001")
opts.add_argument("--headless=new")
# do not load images: saves most of the page weight
opts.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
driver = webdriver.Chrome(options=opts)

Oczekiwanie i timeouty

Przez proxy strony otwierają się wolniej niż bezpośrednio. Zamiast pauz o stałej długości używaj jawnego oczekiwania przez WebDriverWait: skrypt pójdzie dalej, gdy tylko pojawi się element. Ogólny limit ładowania ustawia driver.set_page_load_timeout(): ustaw go z zapasem, np. 60 sekund.

Jeśli strona się nie otwiera

  • Pojawia się okno logowania. IP skryptu nie zostało dodane do dostępu po IP albo się zmieniło.
  • ERR_PROXY_CONNECTION_FAILED. Sprawdź host i port w --proxy-server.
  • ERR_TUNNEL_CONNECTION_FAILED. Proxy odrzuciło połączenie: najczęściej w planie skończył się transfer.
  • TimeoutException. Strona nie zdążyła się załadować: zwiększ limit albo sprawdź, czy sama strona odpowiada.

Jeśli proxy nie działa

Pytania i odpowiedzi (FAQ)

Dlaczego http://username:password@host nie działa w --proxy-server?

Chrome celowo ignoruje dane logowania w tej fladze. Dlatego potrzebujesz białej listy IP albo narzędzia, które odpowie za Ciebie na żądanie uwierzytelnienia.

Jak uruchomić kilka przeglądarek z różnymi IP?

Daj każdej instancji Chrome własny port sticky z zakresu 10000–20000. Każdy port utrzymuje własny IP.

Jak wybrać kraj IP?

Przełącz się na „Tryb zaawansowany” (Ustawienia → Tryb ustawień → Zaawansowany), otwórz swój plan i ustaw domyślne kraje w ustawieniach puli, np. de, pl. Biała lista IP będzie wtedy używać adresów tylko z tych krajów. Jeśli pole jest puste, IP pochodzą z dowolnego kraju w puli oprócz wykluczonych.

Czy proxy działa w trybie headless?

Tak. Argument --proxy-server działa tak samo z oknem i bez niego.

Czy mogę użyć Firefoksa zamiast Chrome?

Tak. W Firefoksie proxy ustawia się w ustawieniach profilu, a nie argumentem uruchomienia. On również nie przyjmuje loginu i hasła z kodu, więc dostęp po IP pozostaje najprostszym sposobem.