Прокси с логином в Puppeteer и Playwright: как передать и что значат ошибки

Обе библиотеки управляют браузером, а Chromium не берёт логин и пароль из адреса прокси. Поэтому учётные данные передают отдельно, и каждая библиотека делает это по-своему.

Обновлено · Редакция Prokso

Коротко
  • Флаг --proxy-server не принимает логин и пароль: Chromium отбрасывает такой адрес
  • В Puppeteer логин передаёт page.authenticate(), в Playwright — поля username и password в опции proxy
  • SOCKS5 с логином в Chromium не работает: берите HTTP-порт 823 или доступ по IP

Что означает ошибка

Флаг --proxy-server принимает только схему, хост и порт. Исходный код Chromium отбрасывает адрес прокси с логином и паролем, так что строка http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823 заканчивается ошибкой net::ERR_NO_SUPPORTED_PROXIES.

В Puppeteer учётные данные передаёт метод page.authenticate({username, password}). По документации он предоставляет данные для HTTP-аутентификации и для этого за кулисами включает перехват запросов, что может повлиять на производительность. Метод принадлежит странице, поэтому вызывайте его для каждой новой страницы до page.goto().

В Playwright прокси задают опцией proxy: {server, username, password}. Документация говорит, что поддерживаются HTTP(S) и SOCKSv5, прокси можно задать для всего браузера или для отдельного контекста, а логин и пароль описаны только для HTTP(S)-прокси. Короткая запись gw.prokso.com:823 считается HTTP-прокси.

Причины

  • Логин в --proxy-server. Chromium отбрасывает такой адрес, и браузер остаётся без прокси: net::ERR_NO_SUPPORTED_PROXIES.
  • Нет или неверные учётные данные. Код -338 net::ERR_INVALID_AUTH_CREDENTIALS в Chromium означает, что учётные данные не удалось установить во время HTTP-аутентификации. Проверьте, вызвана ли аутентификация и верны ли логин и пароль; о самом коде — на странице 407.
  • Браузер не добрался до прокси. Код -130 net::ERR_PROXY_CONNECTION_FAILED означает, что не удалось создать соединение с прокси-сервером: ошибка в имени хоста или в подключении сокета. В Firefox под Playwright аналог — NS_ERROR_PROXY_CONNECTION_REFUSED: попытка соединиться с прокси не удалась.
  • SOCKS5 с логином в Chromium. Chromium не поддерживает аутентификацию для SOCKSv5, поэтому page.authenticate() здесь не поможет: рукопожатие завершится SOCKS-ошибкой.
  • Туннель не открылся. Если соединение с прокси есть, но CONNECT к сайту не удался, будет ERR_TUNNEL_CONNECTION_FAILED.

Как исправить

  1. Puppeteer: запускайте с --proxy-server=http://gw.prokso.com:823, а затем вызовите await page.authenticate({username: 'ЛОГИН', password: 'ПАРОЛЬ'}) до перехода на сайт. Полный пример — в инструкции Puppeteer.
  2. Playwright: передайте proxy: {server: 'http://gw.prokso.com:823', username: 'ЛОГИН', password: 'ПАРОЛЬ'} в launch(). Подробности — в инструкции Playwright.
  3. Для SOCKS5 в Chromium включите доступ по IP (до 5 адресов в личном кабинете) и пишите socks5://gw.prokso.com:824 без логина, или перейдите на HTTP-порт 823 с логином.
  4. Нужен один IP на весь сценарий — берите порт из диапазона 10000–20000: он держит фиксированный IP в течение длительности сессии (1–120 мин, по умолчанию 30). Подробнее — sticky-сессия.
  5. Если видите ERR_PROXY_CONNECTION_FAILED, проверьте хост gw.prokso.com, порт и сеть по странице ошибки подключения к прокси.

Как проверить, что всё заработало

После запуска откройте https://prokso.com/ip в той же странице и прочитайте JSON: поля ip, country и org должны принадлежать прокси, а не вашему подключению. То же видно на странице проверки IP.

Диагностика за 2 минуты

Сначала вставьте строку в проверку прокси. Если там прокси работает, причина в программе или её настройках. Если нет — проверьте строку из терминала:

curl -v -x "http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823" https://api.ipify.org
  • Строка < HTTP/1.1 407 сразу после CONNECT — отвечает прокси. Название после кода, например NO_USER, подсказывает причину.
  • Прокси ответил на CONNECT кодом 200, а дальше пришёл другой код — прокси работает, этот ответ дал сайт.
  • Никакого ответа, только тайм-аут — соединение не дошло до прокси: проверьте хост, порт и сеть.

Инструкции, где встречается эта ошибка

Вопросы и ответы

Можно ли задать разные прокси для разных вкладок?

Флаг --proxy-server задаёт прокси для всего браузера. В Playwright документация позволяет задать прокси и для отдельного контекста, так что разные контексты могут идти через разные порты.

Почему page.authenticate() не работает с SOCKS5?

Метод отвечает на запрос HTTP-аутентификации. Chromium для SOCKSv5 аутентификацию не поддерживает, так что запроса на вход просто не будет. Берите HTTP-порт или доступ по IP.

Где взять логин и пароль?

Скопируйте строку прокси в личном кабинете на странице плана. Как устроен логин и какие параметры в него добавляются — на странице <a href="/ru/help/gateway">шлюза</a>.

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

Регистрация за минуту, доступы сразу после оплаты.

Создать аккаунт