Proxy z loginem i hasłem w Selenium: co działa z Chrome
Chrome nie przyjmuje loginu i hasła w linii proxy, a Selenium nie ma na nie osobnego pola. Omawiamy opcje, które zostają, i ograniczenia każdej z nich.
Zaktualizowano · Redakcja Prokso
- Selenium z Chrome nie może przekazać loginu i hasła w --proxy-server
- Najprostsze rozwiązanie to dostęp po IP w panelu klienta, do 5 adresów; inne drogi to rozszerzenie lub obsługa BiDi
- selenium-wire nie jest już utrzymywane, więc nie używaj go w nowych projektach
Co oznacza błąd
Selenium przekazuje proxy do Chrome argumentem --proxy-server, a Chromium odrzuca adres proxy z loginem i hasłem. W efekcie przeglądarka zostaje bez proxy z błędem ERR_NO_SUPPORTED_PROXIES. Jeśli natomiast po prostu nie podasz loginu, proxy odpowie kodem 407 i będzie czekać na dane logowania.
Przy SOCKS5 jest jeszcze surowiej: według dokumentacji Chromium Chrome nie obsługuje dla SOCKSv5 żadnych metod uwierzytelniania. SOCKS5 z loginem nie zadziała więc w Chrome ani z Selenium, ani bez niego.
Działające drogi są cztery: usunąć login przez dostęp po IP, oddać logowanie rozszerzeniu, użyć obsługi uwierzytelniania WebDriver BiDi albo postawić pośrednie proxy w rodzaju selenium-wire. Poniżej – co z tego jest dziś aktualne.
Przyczyny
- Login w --proxy-server. Linię
http://LOGIN:HASŁO@gw.prokso.com:823Chromium uznaje za niepoprawną i odrzuca. - Rozszerzenie się nie załadowało. Rozszerzenie odpowiadające na żądanie proxy przez chrome.webRequest.onAuthRequired potrzebuje w Manifest V3 uprawnienia webRequestAuthProvider. Do tego w markowych wersjach Chrome 137 usunięto flagę --load-extension; w Chromium i Chrome for Testing nadal działa.
- Przestarzałe selenium-wire. Repozytorium selenium-wire jest zarchiwizowane, a autor pisze w README, że projekt nie jest już utrzymywany. Poprawek pod nowe wersje Selenium i Chrome nie będzie.
- SOCKS5 z loginem. Chrome nie potrafi uwierzytelniać się w SOCKS5, więc port 824 z loginem da błąd uzgadniania SOCKS.
Jak to naprawić
- Najprościej: dodaj IP swojego serwera lub komputera do dostępu po IP w panelu klienta (do 5 adresów) i uruchamiaj Chrome z
--proxy-server=http://gw.prokso.com:823bez loginu. Tak samo działa SOCKS5:socks5://gw.prokso.com:824. Przykład – w instrukcji Selenium. - Jeśli IP maszyny często się zmienia, użyj rozszerzenia z obsługą chrome.webRequest.onAuthRequired: pole isProxy ma w nim wartość true dla żądania Proxy-Authenticate, a rozszerzenie zwraca login i hasło. Dla Chrome 137 i nowszych ładuj je w Chrome for Testing lub Chromium.
- WebDriver BiDi: ustaw
options.enable_bidi = Truei dodaj obsługędriver.network.add_auth_handler('LOGIN', 'HASŁO'). Dokumentacja Selenium opisuje obsługę uwierzytelniania dla żądań Basic i Digest, a o proxy osobno nie pisze, więc sprawdź działanie z kodem 407 na swoich wersjach Chrome i Selenium. - Nie używaj selenium-wire w nowych projektach: nie jest już utrzymywane. Jeśli już go używasz, zaplanuj przejście na dostęp po IP lub BiDi.
- Jeśli zamiast strony widzisz 407, sprawdź login i hasło według strony 407 Proxy Authentication Required; jeśli przeglądarka nie dociera do bramy – według strony ERR_PROXY_CONNECTION_FAILED.
Jak sprawdzić, czy działa
Otwórz przez Selenium https://prokso.com/ip i przeczytaj JSON ze strony: ip, country i org powinny należeć do proxy. Jeśli coś się nie zgadza, przejdź sprawdzenie krok po kroku.
Diagnoza w 2 minuty
Najpierw wklej linię do sprawdzania proxy. Jeśli tam proxy działa, przyczyna leży w programie lub jego ustawieniach. Jeśli nie - sprawdź linię z terminala:
curl -v -x "http://LOGIN:HASŁO@gw.prokso.com:823" https://api.ipify.org
- Wiersz
< HTTP/1.1 407zaraz poCONNECToznacza, że odpowiada proxy. Nazwa po kodzie, na przykładNO_USER, wskazuje przyczynę. - Proxy odpowiedziało na
CONNECTkodem 200, a potem przyszedł inny kod - proxy działa, tę odpowiedź dała strona. - Brak odpowiedzi, tylko przekroczony czas - połączenie nie dotarło do proxy: sprawdź host, port i sieć.
Instrukcje, w których pojawia się ten błąd
Pytania i odpowiedzi (FAQ)
Czy można przekazać login przez ChromeOptions?
Nie. Argument --proxy-server przekazuje Chrome tylko schemat, host i port, a adres z loginem i hasłem Chromium odrzuca. Login przekazuje się rozszerzeniem, przez BiDi albo zastępuje dostępem po IP.
Czy dostęp po IP da jeden IP na całą sesję?
Dostęp po IP tylko usuwa login. Stałość IP zależy od portu: 823 i 824 dają nowy IP na każde żądanie, a porty 10000–20000 trzymają stały IP przez czas trwania sesji. Więcej – <a href="/pl/glossary/sticky-session">sesja sticky</a>.
Ile adresów można dodać do dostępu po IP?
Do 5 adresów na plan. Jeśli maszyn jest więcej, pozostałe mogą logować się loginem przez rozszerzenie lub BiDi; składnia loginu – na stronie <a href="/pl/help/gateway">bramy</a>.
Inne błędy proxy
Rezydencjalne $1.59, mobilne $2.50, serwerowe $0.65 za 1 GB
Rejestracja w minutę, dostęp od razu po płatności.