Настройка прокси в Playwright

Прокси в Playwright с логином и паролем в опции proxy: Chromium, Firefox и WebKit, отдельный прокси для каждого контекста и ограничения SOCKS5.

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

Данные для подключения
Хост
gw.prokso.com
Порт
823 HTTP · 824 SOCKS5 — новый IP на каждый запрос · 10000–20000 фиксированный IP (sticky-сессия), HTTP(S) и SOCKS5
Логин и пароль
в кабинете, на странице плана

Готовые строки в нужном формате генерирует кабинет: выберите страну, тип IP и протокол.

Коротко
  • Хост — gw.prokso.com, порты 823 (HTTP), 824 (SOCKS5), 10000–20000 (фиксированный IP, HTTP или SOCKS5)
  • Логин и пароль — в кабинете на странице плана
  • Проверяйте IP в ответе самого запроса через прокси: страница «Мой IP» в браузере ваш скрипт не проверяет
Прокси в Playwright: короткая видеоинструкция · 0:33

Пошаговая инструкция, как подключить прокси Prokso в Playwright. Займёт несколько минут.

Шаг 1. Возьмите данные прокси в кабинете

Откройте план и скопируйте хост gw.prokso.com, порт, логин и пароль. Порт 823 — HTTP, 824 — SOCKS5 (оба дают новый IP на каждый запрос); порты 10000–20000 — фиксированный IP до 120 минут, работают и как HTTP, и как SOCKS5 (каждый порт — отдельный адрес). Страну задают в логине: логин__cr.ua.

Блок «Доступ» на странице плана: хост, порты, логин и пароль для строки прокси
Блок «Доступ» на странице плана: хост, порты, логин и пароль для строки прокси

Шаг 2. Укажите прокси в опциях запуска

Playwright принимает прокси вместе с логином и паролем в опции proxy — отдельная авторизация не нужна. Работает для Chromium, Firefox и WebKit.

Шаг 3. Запустите пример

Код ниже откроет страницу и выведет IP-адрес прокси. В Python синтаксис такой же: chromium.launch(proxy={...}).

import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: { server: "http://gw.prokso.com:823", username: "USERNAME", password: "PASSWORD" },
});
const page = await browser.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.textContent("body"));
await browser.close();

Сохраните код как check.mjs и запустите node check.mjs.

Шаг 4. Разные IP для разных контекстов

Прокси можно задать и для отдельного контекста: browser.newContext({ proxy }). Так в одном браузере работают несколько профилей с разными фиксированными портами.

Шаг 5. Проверьте IP в запущенном браузере

Пример из шага 3 открывает https://api.ipify.org в браузере Playwright и выводит IP, который видит сайт, — он должен отличаться от вашего. Для нескольких контекстов откройте этот адрес в каждом: на разных фиксированных портах IP будут разные. Обычный браузер на компьютере идёт без прокси и покажет ваш адрес.

Пример запуска: в выводе — IP прокси, а не ваш. На порту 823 каждый запуск даёт новый адрес
Пример запуска: в выводе — IP прокси, а не ваш. На порту 823 каждый запуск даёт новый адрес

Прокси на контекст: несколько IP в одном браузере

Контекст в Playwright — это изолированный профиль со своими cookie. Задав каждому контексту свой фиксированный порт, вы получаете несколько независимых сессий в одном браузере:

const browser = await chromium.launch();

for (const port of [10001, 10002]) {
  // each context has its own cookies and its own sticky IP
  const context = await browser.newContext({
    proxy: { server: `http://gw.prokso.com:${port}`, username: "USERNAME", password: "PASSWORD" },
  });
  const page = await context.newPage();
  await page.goto("https://prokso.com/ip");
  console.log(port, await page.textContent("body"));
  await context.close();
}
await browser.close();

Это экономит память по сравнению с отдельным браузером на каждую сессию.

Как сократить расход трафика

Отменяйте загрузку тяжёлых ресурсов через route. Картинки, видео и шрифты дают большую часть объёма страницы и для сбора данных не нужны:

await page.route("**/*", (route) => {
  // skip heavy resources: they are not needed for data collection
  const skip = ["image", "media", "font"].includes(route.request().resourceType());
  return skip ? route.abort() : route.continue();
});

Если страница не открывается

  • net::ERR_PROXY_CONNECTION_FAILED. Браузер не достучался до прокси: проверьте поле server.
  • net::ERR_TUNNEL_CONNECTION_FAILED. Прокси ответил отказом: проверьте логин, пароль и остаток трафика.
  • Тайм-аут навигации. Стандартные 30 секунд бывают малы для резидентских адресов. Увеличьте тайм-аут в page.goto().
  • SOCKS5 с паролем в Chromium. Не поддерживается. Используйте HTTP или доступ по IP.

Подробнее о кодах — на странице коды ошибок прокси.

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

Работает ли прокси одинаково в Chromium, Firefox и WebKit?

HTTP-прокси с логином и паролем работает во всех трёх. Различия касаются SOCKS5: с паролем он в Chromium не поддерживается.

Как задать прокси в тестах Playwright Test?

В файле конфигурации в разделе <code>use</code> укажите тот же объект <code>proxy</code> с полями <code>server</code>, <code>username</code> и <code>password</code>.

Можно ли часть адресов пустить мимо прокси?

Да, в объекте <code>proxy</code> есть поле <code>bypass</code> со списком доменов через запятую.