Режим UC в SeleniumBase с прокси не работает: причины и решения
Жалоба всегда одна и та же: режим UC обходит Cloudflare без прокси и не работает с ним, или IP просто никогда не меняется. Оба симптома имеют конкретные причины — и ни одна из них не является ошибкой SeleniumBase.
Поиск seleniumbase uc mode proxy приводит вас на одни и те же три страницы: вопрос на Stack Overflow, где IP никогда не меняется при использовании трех разных прокси-сервисов, проблема на GitHub seleniumbase/SeleniumBase#3046 ("Режим UC не работает с прокси", подана в августе 2024 года на версии 4.29.9, закрыта как не воспроизводимая), и обсуждение, где ответ мейнтейнера состоит из двух предложений: прокси с аутентификацией требуют расширения для Chrome, и у вас может быть просто плохой прокси. Обе части этого ответа верны и вместе объясняют почти все сбои. Вот полная версия, плюс порядок отладки, который находит причину.
Два разных сбоя, которые выглядят одинаково
Прежде чем что-то менять, выясните, какая у вас проблема, потому что решения не пересекаются. Сбой A: выходной IP никогда не меняется. Ваш скрипт выполняется, страницы загружаются, и цель видит ваш реальный адрес — прокси никогда не был в пути. Сбой B: прокси работает, и сайт блокирует вас. Режим UC проходит через Cloudflare без прокси, затем попадает в цикл испытаний, как только вы его добавляете, что именно и описывает проблема #3046. Сбой A — это проблема с подключением. Сбой B — это проблема с репутацией IP. Обработка одного как другого — вот почему эти обсуждения длятся страницами.
Почему прокси с аутентификацией требуют расширения — и почему это важно в режиме UC
Chrome не имеет способа передачи учетных данных прокси через командную строку. Флаг --proxy-server тихо отбрасывает любые user:pass@, которые вы встраиваете, и вызов 407 появляется в виде нативного диалога, который WebDriver не может обработать. Поэтому, когда вы передаете строку прокси, содержащую учетные данные, SeleniumBase генерирует небольшое расширение для Chrome на лету, записывает его во временную папку и загружает при запуске, чтобы оно могло ответить на вызов за вас. Это тот механизм, на который ссылается мейнтейнер, и тот же, который описан в нашем руководстве по аутентифицированным прокси в Selenium.
Режим UC добавляет движущиеся части вокруг этого: он сначала запускает Chrome, затем подключает исправленный chromedriver и отключает драйвер во время скрытных действий. Расширение должно загрузиться до того, как это произойдет, и если оно не загружается, ничего не вызывает исключение — Chrome просматривает напрямую, и вы получаете Сбой A. Обычная причина — это расхождение версий. Chrome 137 изменил поведение расширений настолько, чтобы сломать аутентификацию прокси, пока SeleniumBase не выпустил обновление, поэтому старая закрепленная версия плюс текущий Chrome всегда терпят неудачу. Сначала обновите, затем отлаживайте.
Форматы прокси для режима UC в SeleniumBase, которые действительно работают
Ошибки в формате составляют удивительную долю отчетов о "проигнорированном прокси". SeleniumBase принимает прокси как простую строку, с учетными данными или без, как в менеджерах Driver и SB, так и в командной строке:
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
Три правила, которые следуют из этого. Не оборачивайте строку в http:// и учетные данные одновременно, если вы не проверили, что ваша версия это поддерживает — USER:PASS@HOST:PORT — это документированная форма. Не ожидайте, что SOCKS5 с учетными данными будет работать вообще: это ограничение Chromium, идентичное тому, которое мы рассматриваем для аутентификации Playwright SOCKS5, и ни одна из рамок не исправляет его. И если ваш пароль содержит @ или :, замените его на что-то буквенно-цифровое, а не отлаживайте парсер.
Решение, которое устраняет весь класс сбоев
Если машина, на которой работает ваш скрейпер, имеет стабильный публичный IP, аутентифицируйте его вместо запроса. Зарегистрируйте адрес у вашего провайдера — каждый план QuantumProxies поддерживает белый список IP наряду с user:pass — затем передайте простой host:port. Отсутствие учетных данных означает отсутствие расширения: на один компонент меньше, который ломается при обновлении Chrome, на один файл меньше загружается в браузер, который вы хотите оставить незаметным. На VPS это самое ценное изменение в этом посте.
Ограничение топологическое, а не техническое: белый список аутентифицирует машину, поэтому авто-масштабируемые контейнеры, CI-исполнители и все, что находится за вращающимся NAT, все еще нуждаются в учетных данных. Для них сохраните путь к расширению и держите SeleniumBase в актуальном состоянии.

Проверьте выходной IP, прежде чем винить режим UC
Это шаг ноль, и большинство людей его пропускают. Докажите, что трафик выходит через прокси, в изоляции, прежде чем вы измените настройку скрытности. Сначала протестируйте те же учетные данные вне браузера — если curl не может их использовать, ни одна рамка не сможет:
# 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()"
Если шаг 1 не удается, проблема в прокси или учетных данных. Если шаг 1 проходит, а шаг 3 не удается, проблема в расширении или версии Chrome. Если оба проходят, и только uc=True не удается, тогда — и только тогда — это взаимодействие с режимом UC. Знание того, какой выход вы действительно получили, так же важно, как и знание того, что вы его получили: наш бесплатный проверщик качества IP сообщает адрес, его тип и репутацию, что является разницей между "прокси работает" и "прокси пройдет".
Когда прокси работает, а Cloudflare все еще побеждает
Это Сбой B, и это не ошибка ни в чем. Режим UC делает браузер похожим на человека; он не может сделать сеть похожей на жилую. Направьте скрытый браузер через подсеть дата-центра, которую уже сожгли сотни других скрейперов, и вы получите сложную версию испытания — ту, которая никогда не разрешается, сколько бы раз вы ни нажимали на нее. Ни одна рамка браузера не решает это, потому что вердикт выносится до того, как отпечаток даже прочитан. Наши заметки о ошибке Cloudflare 1020 и о избежании CAPTCHA при скрейпинге приводят к тому же: CAPTCHA — это симптом, репутация IP — причина.
Три вещи меняют результат. Перейдите на жилые IP: реальные домашние адреса в более чем 200 странах имеют репутацию, которую диапазон дата-центра не может. Используйте липкую сессию для всего, что имеет логин или корзину, так как ротация в середине потока читается как захват сессии, и вращающиеся выходы для широких безгосударственных обходов. И сопоставьте страну выхода с локалью, которую вы эмулируете — немецкий выход с локалью en-US и нью-йоркским часовым поясом оценивается как аномалия.
Две детали окружения замыкают цикл. Режим UC обнаруживается в безголовом режиме, поэтому на Linux используйте виртуальный дисплей (xvfb=True) вместо headless=True — вот почему несколько отчетов "работает на Windows, падает на Ubuntu" разрешаются, как только дисплей исправлен, и почему помощники на основе PyAutoGUI, такие как uc_gui_click_captcha(), нуждаются в дисплее, чтобы что-то нажать. И протестируйте incognito=True в обоих направлениях с аутентифицированным прокси: расширения и инкогнито — хрупкая пара, и ваши учетные данные передаются в расширении.

Контрольный список отладки, по порядку
- Проверьте, изменился ли выходной IP. Загрузите конечную точку эхо IP и прочитайте ее. Все, что ниже, бессмысленно, пока это не пройдет.
- Протестируйте прокси вне браузера с помощью curl или requests, используя те же учетные данные.
- Обновите SeleniumBase и драйвер. Изменения в расширениях Chrome 137 сломали аутентификацию прокси на старых версиях.
- Временно отключите
uc=True. Если прокси работает в обычном режиме, вы изолировали взаимодействие. - Переключитесь на белый список IP, если у машины есть фиксированный адрес — это полностью удаляет расширение из картины.
- Используйте xvfb, а не headless, на Linux; режим UC обнаруживается в безголовом режиме, и помощники CAPTCHA нуждаются в дисплее.
- Только теперь изменяйте настройки скрытности: переключите инкогнито, увеличьте
reconnect_time, затем измените тип прокси.
Режим CDP, документированный преемник обычного режима UC, ничего из этого не меняет: ограничения прокси исходят от Chrome, а не от фреймворка, поэтому тот же контрольный список применим. Для межфреймворкового обзора, кто поддерживает аутентифицированные прокси, наша карта прокси-антидетект-фреймворков показывает это бок о бок.
Часто задаваемые вопросы
Почему мой IP не меняется в режиме UC в SeleniumBase?
Почти всегда потому, что расширение для аутентификации прокси не загрузилось, и Chrome просматривал напрямую. Ничего не вызывает ошибку, когда это происходит. Обновите SeleniumBase, убедитесь, что строка прокси имеет вид USER:PASS@HOST:PORT, и протестируйте те же учетные данные с curl. Если у машины стабильный публичный IP, добавьте его в белый список и полностью уберите учетные данные.
Почему режим UC обходит Cloudflare без прокси, но не с ним?
Потому что ваше собственное соединение имеет чистую репутацию, а выход прокси — нет. Общие диапазоны дата-центров сильно помечены, и помеченный IP получает сложное испытание, которое никакая автоматизация не может пройти. Переместите задачу на жилые или мобильные выходы и протестируйте снова, прежде чем менять любую настройку скрытности — проблема никогда не была в браузере.
Работает ли режим UC в SeleniumBase с прокси SOCKS5?
Без учетных данных — да. С учетными данными — нет — Chromium никогда не реализовывал аутентификацию SOCKS5 с именем пользователя и паролем, поэтому ни одна из рамок семейства Selenium не может добавить это. Используйте HTTP-узел того же шлюза с учетными данными или добавьте свой IP в белый список и оставьте узел SOCKS5 неаутентифицированным.
Могу ли я запускать режим UC с прокси в безголовом режиме?
Вы можете, но не должны. Режим UC обнаруживается в безголовом режиме, и методы помощников CAPTCHA нуждаются в реальном дисплее, потому что они управляют мышью через PyAutoGUI. На сервере Linux используйте xvfb=True для виртуального дисплея; эта комбинация — то, на что нацелены поддерживаемые примеры.
Как использовать ротацию прокси с SeleniumBase?
Укажите на вращающийся шлюз, а не управляйте списком: каждое новое соединение получает другой выход из пула, без изменений кода. Для потоков, которые должны сохранять одну идентичность на нескольких страницах, запросите липкую сессию в параметрах имени пользователя, чтобы выход сохранялся на время окна сессии, и запускайте новый драйвер для каждой идентичности.
Режим UC не борется с вашим прокси. Он накладывает последовательность скрытого запуска поверх механизма учетных данных, для которого Chrome никогда не был предназначен для автоматизации, а затем сгоревший IP завершает работу. Уберите расширение, добавив в белый список, проверьте выход, прежде чем трогать что-либо еще, и дайте браузеру IP, который еще не был израсходован.