Прокси с логином и паролем в Selenium: что работает с Chrome
Chrome не принимает логин и пароль в строке прокси, а в Selenium нет отдельного поля для них. Разбираем варианты, которые остаются, и ограничения каждого.
Обновлено · Редакция Prokso
- Selenium с Chrome не может передать логин и пароль в --proxy-server
- Самое простое решение — доступ по IP в личном кабинете, до 5 адресов; другие пути — расширение или обработчик BiDi
- selenium-wire больше не поддерживается, поэтому в новые проекты его не берите
Что означает ошибка
Selenium передаёт прокси в Chrome аргументом --proxy-server, а Chromium отбрасывает адрес прокси с логином и паролем. В итоге браузер остаётся без прокси с ошибкой ERR_NO_SUPPORTED_PROXIES. Если же логин просто не указать, прокси отвечает кодом 407 и ждёт учётные данные.
Для SOCKS5 ситуация ещё жёстче: по документации Chromium, Chrome не поддерживает для SOCKSv5 никаких методов аутентификации. Так что SOCKS5 с логином в Chrome не заработает ни с Selenium, ни без него.
Рабочих путей четыре: убрать логин через доступ по IP, отдать вход расширению, воспользоваться обработчиком аутентификации WebDriver BiDi или поставить промежуточный прокси вроде selenium-wire. Ниже — что из этого актуально сейчас.
Причины
- Логин в --proxy-server. Строку
http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823Chromium считает некорректной и отбрасывает. - Расширение не загрузилось. Расширению, которое отвечает на запрос прокси через chrome.webRequest.onAuthRequired, в Manifest V3 нужно разрешение webRequestAuthProvider. К тому же в фирменных сборках Chrome 137 убран флаг --load-extension; в Chromium и Chrome for Testing он работает.
- Устаревший selenium-wire. Репозиторий selenium-wire архивирован, а в README автор пишет, что проект больше не поддерживается. Исправлений под новые версии Selenium и Chrome не будет.
- SOCKS5 с логином. Chrome не умеет аутентификацию SOCKS5, так что порт 824 с логином даст ошибку SOCKS-рукопожатия.
Как исправить
- Проще всего: добавьте IP своего сервера или компьютера в доступ по IP в личном кабинете (до 5 адресов) и запускайте Chrome с
--proxy-server=http://gw.prokso.com:823без логина. Так же работает SOCKS5:socks5://gw.prokso.com:824. Пример — в инструкции Selenium. - Если IP машины часто меняется, используйте расширение с обработчиком chrome.webRequest.onAuthRequired: поле isProxy в нём равно true для запроса Proxy-Authenticate, и расширение возвращает логин и пароль. Для Chrome 137 и новее загружайте его в Chrome for Testing или Chromium.
- WebDriver BiDi: включите
options.enable_bidi = Trueи добавьте обработчикdriver.network.add_auth_handler('ЛОГИН', 'ПАРОЛЬ'). Документация Selenium описывает обработчики аутентификации для запросов Basic и Digest, а о прокси отдельно не пишет, поэтому проверьте работу с кодом 407 на своих версиях Chrome и Selenium. - selenium-wire не берите в новые проекты: его больше не поддерживают. Если он уже стоит, планируйте переход на доступ по IP или BiDi.
- Если видите 407 вместо страницы, проверьте логин и пароль по странице 407 Proxy Authentication Required; если браузер не добирается до шлюза — по странице ERR_PROXY_CONNECTION_FAILED.
Как проверить, что всё заработало
Откройте через Selenium https://prokso.com/ip и прочитайте JSON со страницы: ip, country и org должны принадлежать прокси. Если что-то не так, пройдите проверку по шагам.
Диагностика за 2 минуты
Сначала вставьте строку в проверку прокси. Если там прокси работает, причина в программе или её настройках. Если нет — проверьте строку из терминала:
curl -v -x "http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823" https://api.ipify.org
- Строка
< HTTP/1.1 407сразу послеCONNECT— отвечает прокси. Название после кода, напримерNO_USER, подсказывает причину. - Прокси ответил на
CONNECTкодом 200, а дальше пришёл другой код — прокси работает, этот ответ дал сайт. - Никакого ответа, только тайм-аут — соединение не дошло до прокси: проверьте хост, порт и сеть.
Инструкции, где встречается эта ошибка
Вопросы и ответы
Можно ли передать логин через ChromeOptions?
Нет. Аргумент --proxy-server передаёт Chrome только схему, хост и порт, а адрес с логином и паролем Chromium отбрасывает. Логин передают расширением, через BiDi или заменяют доступом по IP.
Даст ли доступ по IP один IP на всю сессию?
Доступ по IP только убирает логин. Постоянство IP задаёт порт: 823 и 824 дают новый IP на каждый запрос, порты 10000–20000 держат фиксированный IP в течение длительности сессии. Подробнее — <a href="/ru/glossary/sticky-session">sticky-сессия</a>.
Сколько адресов можно добавить в доступ по IP?
До 5 адресов на план. Если машин больше, остальные могут входить по логину через расширение или BiDi; синтаксис логина — на странице <a href="/ru/help/gateway">шлюза</a>.
Другие ошибки прокси
Резидентские $1.59, мобильные $2.50, серверные $0.65 за 1 ГБ
Регистрация за минуту, доступы сразу после оплаты.