Настройка прокси в Playwright
В Playwright поддержка прокси встроена прямо в API: объект proxy передаётся либо в launch() — для всего браузера, либо в newContext() — для отдельного контекста. Работает одинаково в Chromium, Firefox и WebKit, а авторизацию по логину и паролю Playwright выполняет сам — никаких всплывающих окон входа. Ниже рабочие примеры для Node.js и Python.
Перед настройкой: данные прокси и порты
Вам понадобятся IP-адрес прокси и порт. И то и другое есть в личном кабинете — откройте активную подписку, там указаны все данные для подключения. Порт зависит от способа авторизации:
| Авторизация | Порт HTTP | Порт SOCKS5 | Кому подходит |
|---|---|---|---|
| Логин / пароль данные из личного кабинета |
8080 |
1080 |
Запуск скриптов с машин, у которых меняется IP |
| Привязка по IP логин и пароль не нужны |
8085 |
1085 |
Серверы со статическим IP — данные для входа не попадают в код |
При работе с привязкой сначала добавьте IP-адрес сервера в привязку в личном кабинете — после этого в объекте proxy достаточно одного поля server.
Прокси для всего браузера
Передайте параметр proxy в launch() — его унаследуют все страницы и контексты:
Node.js
Python
В Playwright Test тот же объект задаётся один раз в playwright.config.ts — и его подхватят все тесты:
Поля username и password автоматически отвечают на запрос авторизации прокси — это и есть решение проблемы «proxy authentication», которая мучает всех при работе с голым флагом --proxy-server в Chromium. Храните данные для входа в переменных окружения, а не в самом скрипте. На порту 8085 с привязкой по IP оба поля не нужны — передавайте только server.
Свой прокси на каждый контекст
Контекст в Playwright — это изолированный «профиль инкогнито», и у каждого может быть собственный прокси. Это удобно, когда одному скрипту нужны несколько аккаунтов или локаций одновременно:
Node.js
Python
Если нужен постоянный профиль (куки и хранилище сохраняются на диск), launch_persistent_context() принимает тот же параметр proxy:
Прокси SOCKS5
Чтобы использовать SOCKS5, поменяйте схему в server:
Важное ограничение: Playwright не передаёт логин и пароль SOCKS5-прокси — поля username/password работают только с HTTP-прокси. Поэтому для SOCKS5 используйте порт 1085 с привязкой по IP. Впрочем, для большинства задач в Playwright проще взять HTTP-прокси.
В мануалах по curl и Python requests встречается схема socks5h:// — там дополнительная «h» заставляет прокси резолвить доменные имена вместо вашей машины, чтобы DNS-запросы не уходили мимо прокси. Браузеры такую схему не распознают, и она им не нужна: по документации Chromium с обычной socks5:// резолвинг имён всегда выполняется на стороне прокси.
Как пустить часть хостов мимо прокси
Необязательное поле bypass перечисляет хосты, к которым нужно ходить напрямую — например, ваши собственные тестовые серверы:
Загрузка прокси из списка и ротация
С пакетом прокси адреса никто не вписывает в код руками: выгрузите весь список из личного кабинета в файл — по одному IP:порт на строку, порядок полей и разделитель настраиваются при выгрузке — и загружайте его в начале скрипта:
Python
Node.js
Если список работает на портах с логином и паролем (8080 для HTTP), новая выгрузка не нужна — задайте логин и пароль один раз константами и передавайте их вместе с каждым адресом; на запрос авторизации Playwright ответит сам:
В Node.js те же три поля — { server, username, password } — передаются в newContext(). Помните про ограничение: Chromium не принимает логин и пароль для SOCKS5, поэтому ротация с авторизацией работает на порту 8080. А если файл выгружен уже с данными для входа (строки вида логин:пароль@IP:порт), разбейте каждую строку по @ и заполните те же три поля — доставать логин и пароль из URL сервера Playwright надёжно не умеет.
Контексты создаются и закрываются дёшево, поэтому «один контекст на прокси из списка» — стандартный паттерн ротации. Наши пакеты серверных прокси начинаются от 100 IP, так что сам список узким местом не станет, а когда целевой сайт начнёт ограничивать запросы — обновите список по запросу и выгрузите файл заново.
Если что-то не работает
Самые частые причины: ERR_TUNNEL_CONNECTION_FAILED или ERR_PROXY_CONNECTION_FAILED обычно означают, что порт не соответствует способу авторизации (см. таблицу) — либо, на портах 8085/1085, что IP машины не добавлен в привязку; ошибка авторизации на SOCKS5-прокси значит, что логин и пароль ожидались там, где Playwright их не передаёт, — перейдите на порт 1085 с привязкой; а если один из контекстов ведёт себя не так, как остальные, проверьте, не переопределяет ли он прокси, заданный в launch(). Если дело не в этом — напишите нам в онлайн-чат прямо на этой странице, поможем подключиться.