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