Настройка прокси в Playwright
Скрапьте страницы с JavaScript-рендерингом через ротационные прокси с Playwright.
Playwright автоматизирует браузеры Chromium, Firefox и WebKit - незаменим для скрапинга сайтов, которые рендерят контент через JavaScript. Настройте SotaProxy на уровне запуска браузера, и каждая открываемая браузером страница пойдёт через прокси.
Руководство по настройке
Node.js - прокси на уровне браузера
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.
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.
Прокси на контекст (разные прокси на вкладку)
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 может получать свежие данные прокси, покупать новые и продлевать истекающие - прямо из кода.
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 }),
})Прокси на браузере или на контексте
Playwright принимает учётные данные отдельными полями, а не внутри URL. Важна здесь именно возможность задать прокси на контекст: в одном процессе браузера каждый контекст держит свой адрес:
Передавайте 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 минут.
Начать