Проксі з логіном і паролем у 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:823 Chromium вважає некоректним і відкидає.
  • Розширення не завантажилося. Розширенню, що відповідає на запит проксі через 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-рукостискання.

Як виправити

  1. Найпростіше: додайте IP свого сервера чи комп'ютера до доступу за IP в особистому кабінеті (до 5 адрес) і запускайте Chrome з --proxy-server=http://gw.prokso.com:823 без логіна. Так само працює SOCKS5: socks5://gw.prokso.com:824. Приклад — в інструкції Selenium.
  2. Якщо IP машини часто змінюється, використайте розширення з обробником chrome.webRequest.onAuthRequired: поле isProxy в ньому дорівнює true для запиту Proxy-Authenticate, і розширення повертає логін і пароль. Для Chrome 137 і новіших завантажуйте його в Chrome for Testing або Chromium.
  3. WebDriver BiDi: увімкніть options.enable_bidi = True і додайте обробник driver.network.add_auth_handler('ЛОГІН', 'ПАРОЛЬ'). Документація Selenium описує обробники автентифікації для запитів Basic і Digest, а про проксі окремо не пише, тож перевірте роботу з кодом 407 на своїх версіях Chrome і Selenium.
  4. selenium-wire не беріть у нові проєкти: його більше не підтримують. Якщо він уже стоїть, плануйте перехід на доступ за IP або BiDi.
  5. Якщо бачите 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="/glossary/sticky-session">sticky-сесія</a>.

Скільки адрес можна додати до доступу за IP?

До 5 адрес на план. Якщо машин більше, решта може входити за логіном через розширення або BiDi; синтаксис логіна — на сторінці <a href="/help/gateway">шлюзу</a>.

Резидентські $1.59, мобільні $2.50, серверні $0.65 за 1 ГБ

Реєстрація за хвилину, доступи одразу після оплати.

Створити акаунт