NP NEONPROXYPROXY NETWORK
КупитьЦеныFAQПартнёркаБлог Прокси-чекерМой IPAPI TG-бот

Прокси в Playwright: браузерная автоматизация

Playwright от Microsoft — современная альтернатива Puppeteer и Selenium с нативной поддержкой прокси на уровне browser context. Один context — один IP, изолированные cookies и storage. Это удобно для параллельных воркеров с разными адресами NEONPROXY. Ниже — конфигурации для Python и Node.js. Используйте прокси только для задач, разрешённых robots.txt и Terms of Service сайтов.

HTTP-прокси в Python

Playwright принимает proxy dict при создании context — с username и password без костылей:

from playwright.sync_api import sync_playwright

PROXY = {
    "server": "http://123.45.67.89:8080",
    "username": "your_login",
    "password": "your_password"
}

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    context = browser.new_context(proxy=PROXY)
    page = context.new_page()
    page.goto("https://api.ipify.org?format=json")
    print(page.content())
    context.close()
    browser.close()

Сверьте IP с результатом «Мой IP» при работе через тот же прокси в браузере.

SVYAZVPN — свобода без границ

SOCKS5

Укажите схему socks5:// в поле server:

PROXY = {
    "server": "socks5://123.45.67.89:1080",
    "username": "your_login",
    "password": "your_password"
}

context = browser.new_context(proxy=PROXY)

Сравнение протоколов — SOCKS5 vs HTTPS.

Node.js: launch с proxy

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

(async () => {
  const browser = await chromium.launch({
    headless: true,
    proxy: {
      server: 'http://123.45.67.89:8080',
      username: 'your_login',
      password: 'your_password'
    }
  });
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await browser.close();
})();

Proxy на launch наследуют все context'ы. Для разных IP на воркер создавайте отдельные context с разными proxy dict.

Параллельные context и ротация

Playwright эффективен при параллельном парсинге: каждый context = свой IP из пула:

import asyncio
from playwright.async_api import async_playwright

PROXIES = [
    {"server": "http://1.2.3.4:8080", "username": "u", "password": "p"},
    {"server": "http://5.6.7.8:8080", "username": "u", "password": "p"},
]

async def fetch(url, proxy):
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        context = await browser.new_context(proxy=proxy)
        page = await context.new_page()
        await page.goto(url)
        title = await page.title()
        await browser.close()
        return title

async def main():
    tasks = [fetch("https://example.com", px) for px in PROXIES]
    print(await asyncio.gather(*tasks))

Стратегии ротации и sticky session — в гайде по ротации.

Отладка

При ошибке net::ERR_PROXY_CONNECTION_FAILED проверьте прокси в чекере. Playwright сохраняет HAR и скриншоты — включите record_har_path для диагностики. Для простых GET без JS достаточно requests или Scrapy.

Firefox и WebKit

Тот же объект proxy работает с p.firefox.launch() и p.webkit.launch(). Для большинства scraping-задач хватает Chromium.

Интеграция с API

Подгружайте список прокси из API NEONPROXY при старте. Выбор типа адреса — как выбрать прокси. Сравнение с Puppeteer — отдельный гайд. Заказ — здесь.