SeleniumBase UC Mode Proxy nie działa: Przyczyny i rozwiązania

Skarga jest zawsze taka sama: UC Mode pokonuje Cloudflare bez proxy i zawodzi z nim, lub IP po prostu nigdy się nie zmienia. Oba objawy mają konkretne przyczyny — i żaden nie jest błędem SeleniumBase.

Wyszukaj seleniumbase uc mode proxy i trafisz na te same trzy strony: pytanie na Stack Overflow, gdzie IP nigdy się nie zmienia w trzech różnych usługach proxy, problem na GitHub seleniumbase/SeleniumBase#3046 ("UC mode nie działa z proxy", zgłoszony w sierpniu 2024 na wersji 4.29.9, zamknięty jako niemożliwy do odtworzenia) oraz wątek dyskusyjny, gdzie odpowiedź opiekuna jest dwuzdaniowa: proxy z autoryzacją potrzebują rozszerzenia Chrome, a możesz po prostu mieć złe proxy. Obie części tej odpowiedzi są poprawne i razem wyjaśniają prawie każdą awarię. Oto dłuższa wersja, plus kolejność debugowania, która znajduje przyczynę.

Dwie różne awarie, które wyglądają identycznie

Zanim cokolwiek zmienisz, ustal, jaki masz problem, ponieważ rozwiązania nie mają nic wspólnego. Awarie A: wyjściowe IP nigdy się nie zmienia. Twój skrypt działa, strony się ładują, a cel widzi twój prawdziwy adres — proxy nigdy nie było na ścieżce. Awarie B: proxy działa i strona cię blokuje. UC Mode przechodzi przez Cloudflare bez proxy, a następnie napotyka pętlę wyzwań w momencie, gdy dodasz jedno, co dokładnie opisuje problem #3046. Awarie A to problem z infrastrukturą. Awarie B to problem z reputacją IP. Traktowanie jednego jako drugiego to powód, dla którego te wątki ciągną się przez strony.

Dlaczego proxy z autoryzacją potrzebują rozszerzenia — i dlaczego to ma znaczenie w UC Mode

Chrome nie ma sposobu na dostarczenie poświadczeń proxy z linii poleceń. Flaga --proxy-server cicho odrzuca wszelkie user:pass@, które wstawisz, a wynikowe wyzwanie 407 pojawia się jako natywny dialog, którego WebDriver nie może dotknąć. Więc kiedy przekazujesz ciąg proxy zawierający poświadczenia, SeleniumBase generuje na bieżąco małe rozszerzenie Chrome, zapisuje je w tymczasowym folderze i ładuje przy uruchomieniu, aby mogło odpowiedzieć na wyzwanie za ciebie. To jest mechanizm, do którego odnosi się opiekun, i ten sam opisany w naszym przewodniku po proxy z autoryzacją w Selenium.

UC Mode dodaje do tego ruchome części: najpierw uruchamia Chrome, potem dołącza załatany chromedriver, a podczas działań stealth odłącza sterownik. Rozszerzenie musi się załadować, zanim cokolwiek z tego się wydarzy, a jeśli tego nie zrobi, nic nie zgłasza wyjątku — Chrome przegląda bezpośrednio, a ty otrzymujesz Awarie A. Zwykłą przyczyną jest dryf wersji. Chrome 137 zmienił zachowanie rozszerzeń na tyle, aby złamać autoryzację proxy, dopóki SeleniumBase nie wydało aktualizacji, więc stara przypięta wersja plus aktualny Chrome zawodzi cicho za każdym razem. Najpierw zaktualizuj, potem debuguj.

Formaty proxy SeleniumBase UC Mode, które faktycznie działają

Błędy formatowania stanowią zaskakujący udział w raportach "proxy ignorowane". SeleniumBase przyjmuje proxy jako zwykły ciąg, z poświadczeniami lub bez, zarówno w menedżerach Driver, jak i SB, oraz w linii poleceń:

from seleniumbase import Driver, SB

# Authenticated: SeleniumBase builds a proxy-auth extension for this
driver = Driver(uc=True, proxy="USER:PASS@gate.quantumproxies.io:PORT")

# IP-whitelisted: no credentials, no extension
with SB(uc=True, proxy="gate.quantumproxies.io:PORT") as sb:
    sb.uc_open_with_reconnect("https://httpbin.org/ip", 4)
    print(sb.get_text("body"))     # must NOT be your own IP

# Same thing from pytest:
#   pytest test_x.py --uc --proxy=USER:PASS@gate.quantumproxies.io:PORT

Trzy zasady wynikające z tego. Nie owijaj ciągu w http:// i poświadczenia jednocześnie, chyba że zweryfikowałeś, że twoja wersja to obsługuje — USER:PASS@HOST:PORT to udokumentowany kształt. Nie oczekuj, że SOCKS5 z poświadczeniami zadziała w ogóle: to ograniczenie Chromium, identyczne z tym, które omawiamy dla autoryzacji SOCKS5 w Playwright, i żadne frameworki tego nie naprawiają. A jeśli twoje hasło zawiera @ lub :, zmień je na coś alfanumerycznego, zamiast debugować parser.

Rozwiązanie, które usuwa całą klasę awarii

Jeśli maszyna uruchamiająca twój scraper ma stabilne publiczne IP, uwierzytelnij je zamiast żądania. Zarejestruj adres u swojego dostawcy — każdy plan QuantumProxies obsługuje białą listę IP obok user:pass — a następnie przekaż nagi host:port. Brak poświadczeń oznacza brak rozszerzenia: jeden mniej komponent, który psuje się przy aktualizacji Chrome, jeden mniej plik załadowany do przeglądarki, którą chcesz zachować niezauważalną. Na VPS to najbardziej wartościowa zmiana w tym poście.

Ograniczenie jest topologiczne, nie techniczne: biała lista uwierzytelnia maszynę, więc autoskalowane kontenery, biegacze CI i cokolwiek za obracającym się NAT nadal potrzebują poświadczeń. Dla tych, zachowaj ścieżkę rozszerzenia i aktualizuj SeleniumBase.

Schemat przepływu, jak SeleniumBase UC Mode uruchamia przeglądarkę Chrome z proxy: rozszerzenie autoryzacji, późne dołączenie chromedriver, czyste wyjściowe IP rezydencjalne
Każde pole to miejsce, w którym proxy może wypaść z łańcucha. Biała lista usuwa pierwsze, które również psuje się przy aktualizacjach Chrome.

Zweryfikuj wyjściowe IP, zanim obwinisz UC Mode

To jest krok zero i większość ludzi go pomija. Udowodnij, że ruch wychodzi przez proxy, w izolacji, zanim dotkniesz ustawienia stealth. Przetestuj te same poświadczenia poza przeglądarką najpierw — jeśli curl nie może ich użyć, żaden framework nie będzie mógł:

# 1. Does the proxy work at all, outside any browser?
curl -x http://USER:PASS@gate.quantumproxies.io:PORT https://httpbin.org/ip

# 2. Is the toolchain current? (Chrome 137+ broke older extension handling)
pip install -U seleniumbase && sbase get chromedriver

# 3. Does the proxy work WITHOUT the stealth patches?
python -c "from seleniumbase import Driver; \
d=Driver(proxy='USER:PASS@gate.quantumproxies.io:PORT'); \
d.get('https://httpbin.org/ip'); \
print(d.find_element('tag name','body').text); d.quit()"

Jeśli krok 1 zawiedzie, problemem jest proxy lub poświadczenia. Jeśli krok 1 przejdzie, a krok 3 zawiedzie, problemem jest rozszerzenie lub wersja Chrome. Jeśli oba przejdą, a tylko uc=True zawiedzie, to — i tylko wtedy — jest to interakcja UC Mode. Wiedza, które wyjście faktycznie uzyskałeś, jest tak samo ważna, jak wiedza, że je uzyskałeś: nasz darmowy sprawdzacz jakości IP raportuje adres, jego typ i reputację, co jest różnicą między "proxy działa" a "proxy przejdzie".

Kiedy proxy działa, a Cloudflare nadal wygrywa

To jest Awarie B, i nie jest to błąd w niczym. UC Mode sprawia, że przeglądarka wygląda na ludzką; nie może sprawić, że sieć wygląda na rezydencjalną. Przekieruj przeglądarkę stealth przez podsieć centrum danych, którą już spaliło sto innych scraperów, a otrzymasz trudniejszą wersję wyzwania — tę, która nigdy się nie rozwiązuje, ile razy byś jej nie kliknął. Żaden framework przeglądarki tego nie rozwiązuje, ponieważ werdykt jest wydawany, zanim odczytany zostanie odcisk palca. Nasze notatki na temat Cloudflare error 1020 i na temat unikania CAPTCHA podczas scrapingu prowadzą do tego samego miejsca: CAPTCHA to objaw, reputacja IP to przyczyna.

Trzy rzeczy zmieniają wynik. Przejdź na rezydencjalne IP: prawdziwe adresy domowe w ponad 200 krajach mają reputację, której zakres centrum danych nie może mieć. Użyj sesji klejącej do wszystkiego z logowaniem lub koszykiem, ponieważ rotacja w trakcie przepływu jest odczytywana jako przejęcie sesji, a rotujące wyjścia do szerokich bezstanowych przeszukiwań. I dopasuj kraj wyjścia do lokalizacji, którą emulujesz — niemieckie wyjście z lokalizacją en-US i strefą czasową Nowego Jorku jest oceniane jako anomalia.

Dwa szczegóły środowiskowe zamykają pętlę. UC Mode jest wykrywalny w trybie bezgłowym, więc na Linuksie użyj wirtualnego wyświetlacza (xvfb=True) zamiast headless=True — to dlatego kilka raportów "działa na Windows, zawiesza się na Ubuntu" rozwiązuje się, gdy wyświetlacz jest naprawiony, i dlaczego pomocniki oparte na PyAutoGUI, takie jak uc_gui_click_captcha(), potrzebują wyświetlacza, aby cokolwiek kliknąć. I przetestuj incognito=True w obie strony z proxy z autoryzacją: rozszerzenia i incognito to krucha para, a twoje poświadczenia są przesyłane w rozszerzeniu.

Lista kontrolna debugowania problemów z proxy SeleniumBase UC Mode, uporządkowana od weryfikacji wyjściowego IP do zmian ustawień stealth i typu proxy
Pracuj lewą kolumną od góry do dołu. Większość zgłoszeń zamyka się na pierwszych dwóch liniach, długo zanim ktokolwiek musi dotknąć ustawienia stealth.

Lista kontrolna debugowania, w kolejności

CDP Mode, udokumentowany następca zwykłego UC Mode, nie zmienia nic z tego: ograniczenia proxy pochodzą z Chrome, a nie z frameworka, więc ta sama lista kontrolna ma zastosowanie. Dla widoku międzyframeworkowego, kto obsługuje proxy z autoryzacją, nasza mapa proxy frameworków anty-detekcyjnych przedstawia to obok siebie.

Często zadawane pytania

Dlaczego moje IP nie zmienia się z SeleniumBase UC Mode?

Prawie zawsze dlatego, że rozszerzenie proxy-auth się nie załadowało, więc Chrome przeglądał bezpośrednio. Nic nie zgłasza błędu, gdy to się dzieje. Zaktualizuj SeleniumBase, potwierdź, że ciąg proxy to USER:PASS@HOST:PORT, i przetestuj te same poświadczenia za pomocą curl. Jeśli maszyna ma stabilne publiczne IP, umieść je na białej liście i całkowicie zrezygnuj z poświadczeń.

Dlaczego UC Mode omija Cloudflare bez proxy, ale nie z nim?

Ponieważ twoje własne połączenie ma czystą reputację, a wyjście proxy nie. Wspólne zakresy centrum danych są mocno oznaczone, a oznaczone IP otrzymuje trudne wyzwanie, którego żadna automatyzacja nie może rozwiązać. Przenieś zadanie na wyjścia rezydencjalne lub mobilne i przetestuj ponownie, zanim zmienisz jakiekolwiek ustawienie stealth — przeglądarka nigdy nie była problemem.

Czy SeleniumBase UC Mode działa z proxy SOCKS5?

Bez poświadczeń, tak. Z poświadczeniami, nie — Chromium nigdy nie zaimplementowało autoryzacji SOCKS5 z nazwą użytkownika/hasłem, więc żaden framework z rodziny Selenium nie może tego dodać. Użyj punktu końcowego HTTP tej samej bramy z poświadczeniami, lub umieść swoje IP na białej liście i pozostaw punkt końcowy SOCKS5 nieautoryzowany.

Czy mogę uruchomić UC Mode z proxy w trybie bezgłowym?

Możesz, ale nie powinieneś. UC Mode jest wykrywalny w trybie bezgłowym, a metody pomocnicze CAPTCHA potrzebują prawdziwego wyświetlacza, ponieważ sterują myszą za pomocą PyAutoGUI. Na serwerze Linuksowym użyj xvfb=True dla wirtualnego wyświetlacza; ta kombinacja jest tym, na co celują utrzymywane przykłady.

Jak używać rotacji proxy z SeleniumBase?

Wskaż na bramę rotacyjną zamiast zarządzać listą: każde nowe połączenie otrzymuje inne wyjście z puli, bez zmian w kodzie. Dla przepływów, które muszą zachować jedną tożsamość na kilku stronach, zażądaj sesji klejącej w parametrach nazwy użytkownika, aby wyjście utrzymało się na czas trwania okna sesji, i rozpocznij nowy sterownik na tożsamość.

UC Mode nie walczy z twoim proxy. Nakłada sekwencję uruchamiania stealth na mechanizm poświadczeń, którego Chrome nigdy nie zaprojektował do automatyzacji, a potem zużyte IP kończy pracę. Usuń rozszerzenie, umieszczając na białej liście, zweryfikuj wyjście, zanim dotkniesz czegokolwiek innego, i daj przeglądarce IP, które nie zostało już zużyte.

Uruchom UC Mode na czystych rezydencjalnych IP