Реферальная программа
Разработка

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

Скрапьте страницы с JavaScript-рендерингом через ротационные прокси с Playwright.

Playwright автоматизирует браузеры Chromium, Firefox и WebKit - незаменим для скрапинга сайтов, которые рендерят контент через JavaScript. Настройте SotaProxy на уровне запуска браузера, и каждая открываемая браузером страница пойдёт через прокси.

Руководство по настройке

1

Node.js - прокси на уровне браузера

javascript
const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
    proxy: {
      server: 'http://proxy.sotaproxy.com:10000',
      username: 'YOUR_USERNAME',
      password: 'YOUR_PASSWORD',
    },
  });

  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  const content = await page.content();
  console.log(content);
  await browser.close();
})();

Задайте прокси в chromium.launch(). Все страницы, созданные этим экземпляром браузера, идут через SotaProxy.

2

Python - прокси на уровне браузера

python
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={
            "server": "http://proxy.sotaproxy.com:10000",
            "username": "YOUR_USERNAME",
            "password": "YOUR_PASSWORD",
        }
    )
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.content())
    browser.close()

Та же конфигурация прокси в Python. Работает с sync_playwright и async_playwright.

3

Прокси на контекст (разные прокси на вкладку)

javascript
const browser = await chromium.launch();

// Each context gets its own proxy
const context1 = await browser.newContext({
  proxy: {
    server: 'http://proxy.sotaproxy.com:10000',
    username: 'YOUR_USERNAME_c_US',
    password: 'YOUR_PASSWORD',
  },
});

const context2 = await browser.newContext({
  proxy: {
    server: 'http://proxy.sotaproxy.com:10000',
    username: 'YOUR_USERNAME_c_DE',
    password: 'YOUR_PASSWORD',
  },
});

Запустите один браузер, но создайте несколько контекстов с разными конфигурациями прокси. Каждый контекст изолирован - удобно для мультирегионального тестирования.

Автоматизируй через SotaProxy API

Всё описанное выше работает без открытия дашборда. С API-ключом Playwright может получать свежие данные прокси, покупать новые и продлевать истекающие - прямо из кода.

javascript
const API = 'https://api.sotaproxy.com/api/v1'
const H = { Authorization: 'Bearer sk_live_your_key' }

// Every active proxy on your account - no copy-pasting credentials
const { proxies } = await (await fetch(`${API}/proxies`, { headers: H })).json()
const p = proxies[0]
const proxyUrl = `http://${p.login}:${p.password}@${p.ip}:${p.portHttp}`

// Buy more when you scale (price-check first with POST /quote)
await fetch(`${API}/orders`, {
  method: 'POST',
  headers: { ...H, 'Content-Type': 'application/json', 'Idempotency-Key': 'my-unique-order-id' },
  body: JSON.stringify({ product: 'ipv4', countryId: 565, periodId: '1m', quantity: 5 }),
})
Документация API

Прокси на браузере или на контексте

Playwright принимает учётные данные отдельными полями, а не внутри URL. Важна здесь именно возможность задать прокси на контекст: в одном процессе браузера каждый контекст держит свой адрес:

Ротация резидентки
login:password@proxy.sotaproxy.com:10000
Привязка к стране
login_c_US:password@proxy.sotaproxy.com:10000
Липкая на 15 минут
login_c_US_s_42_ttl_15m:password@proxy.sotaproxy.com:10000
Статический адрес (ISP, датацентр)
login:password@ваш-ip:50100, SOCKS5 на 50101

Передавайте server без учётных данных, а логин и пароль кладите в собственные поля. Учётные данные внутри URL сервера Chromium игнорирует.

Свой адрес на каждый контекст браузера

Один браузер, много контекстов, у каждого свой адрес и своя банка с куками. Это самый дешёвый способ вести параллельные личности:

Python: по контексту на личность

from playwright.sync_api import sync_playwright

BASE = "http://proxy.sotaproxy.com:10000"

with sync_playwright() as p:
    browser = p.chromium.launch()
    for i in range(1, 6):
        ctx = browser.new_context(
            proxy={
                "server": BASE,
                "username": f"login_c_US_s_{i}_ttl_1h",
                "password": "password",
            },
            locale="en-US",
            timezone_id="America/New_York",
        )
        page = ctx.new_page()
        page.goto("https://example.com", timeout=30000)
  • Приводите локаль и часовой пояс в соответствие со страной прокси. Американский адрес с варшавским часовым поясом это противоречие, которое скрипты снятия отпечатков читают мгновенно.
  • Липкие сессии здесь важны. Ротация посреди страницы оставит половину ресурсов загруженными с другого адреса.
  • Отсекайте картинки и медиа через маршрутизацию, когда вам нужна только разметка. Это сокращает резидентский трафик в несколько раз.
  • Ставьте таймаут навигации в 30 секунд. Значение по умолчанию нам подходит, а более короткие выбрасывают рабочие маршруты.

Особенности Playwright

Учётные данные внутри server игнорируются

Chromium их вырезает. Если в сетевом логе видите 407, почти всегда причина именно эта.

Localhost идёт мимо прокси

Chromium никогда не проксирует петлю. Тест против локального мока не говорит ничего о работе прокси.

Один контекст, много личностей

Куки и хранилище живут в контексте. Переиспользуя контекст с новым адресом, вы отдаёте сайту прежнюю личность на новом IP.

WebRTC всё равно выдаёт настоящий адрес

Прокси его не закрывает. Отключайте WebRTC в контексте, иначе страница сообщит ваш исходный IP любому скрипту, который спросит.

Заметки и советы

  • Используйте headless: false во время разработки, чтобы наблюдать за браузером и отлаживать. Переключайтесь на headless: true в продакшене.
  • Playwright автоматически обрабатывает HTTPS-прокси через CONNECT-туннелирование - дополнительная настройка не нужна.
  • Для липких сессий включите ID сессии в параметр имени пользователя, чтобы удерживать один IP между переходами по страницам.

FAQ

Можно ли использовать Playwright с SOCKS5-прокси?

Да. Измените URL сервера на socks5://proxy.sotaproxy.com:PORT. Уточните SOCKS5-эндпоинт в дашборде SotaProxy.

Работает ли Playwright для скрапинга сайтов под защитой Cloudflare?

Playwright с резидентными прокси справляется с большинством сайтов под Cloudflare. Для сложных целей Cloudflare комбинируйте со stealth-плагином (playwright-extra + puppeteer-extra-plugin-stealth).

Получи учётные данные прокси

Зарегистрируйся, пополни баланс и скопируй эндпоинт в Playwright. Займёт менее 5 минут.

Начать