StableProxy
© StableProxy – 2021 - 2026 – Ukraine

StableProxy
© StableProxy – 2021 - 2026 – Ukraine


Як правильно налаштувати проксі в Playwright та Puppeteer. Робочі приклади коду, авторизація, SOCKS5, ротація IP та захист від витоків WebRTC.
Proxychi
Автоматизація дій у веб-браузерах за допомогою Playwright або Puppeteer без використання проксі-інфраструктури швидко впирається в жорсткі обмеження антифрод-систем. Сучасні захисні комплекси (Cloudflare, Akamai, Datadome) аналізують не лише фінгерпринти, але й репутацію IP-адреси, з якої надходять запити. Без грамотного налаштування мережевого шару будь-який headless-скрипт виявляється після кількох ітерацій, отримуючи масові CAPTCHA або повне блокування доступу.
Правильне підключення проксі в Puppeteer чи Playwright дозволяє розподіляти навантаження, підтримувати сесії та імітувати поведінку реальних користувачів із різних географічних локацій. Розберемо практичні конфігурації підключення та авторизації для обох фреймворків.
У Puppeteer налаштування мережевого проксі відбувається безпосередньо під час ініціалізації екземпляра Chromium через параметри запуску (launch arguments).
Для підключення використовується прапор --proxy-server. Базовий синтаксис виглядає наступним чином:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: ['--proxy-server=http://185.130.5.15:8080']
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
await browser.close();
})();
Chromium не підтримує передачу облікових даних у форматі http://user:pass@ip:port безпосередньо через аргумент --proxy-server. Для цього використовується метод page.authenticate():
const browser = await puppeteer.launch({
headless: true,
args: ['--proxy-server=http://185.130.5.15:8080']
});
const page = await browser.newPage();
// Авторизація проксі з логіном і паролем puppeteer
await page.authenticate({
username: 'proxy_user',
password: 'proxy_password'
});
await page.goto('https://httpbin.org/ip');
Для протоколу SOCKS5 використовується відповідна префіксація в аргументах:
--proxy-server=socks5://185.130.5.15:1080
Якщо проксі SOCKS5 вимагає авторизації, базовий page.authenticate() у деяких версіях Chromium може працювати нестабільно. У таких випадках застосовують сторонні плагіни або перенаправлення через локальний тунель.
Playwright пропонує більш гнучку архітектуру для роботи з мережевими протоколами. На відміну від Puppeteer, де проксі задається на рівні всього процесу браузера, Playwright дозволяє визначати проксі-конфігурації як для всього браузера, так і для окремих ізольованих контекстів (BrowserContext).
Об'єкт proxy передається безпосередньо у параметри launch або newContext, причому авторизаційні дані вказуються в єдиній структурі:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
proxy: {
server: 'http://185.130.5.15:8080',
username: 'proxy_user',
password: 'proxy_password'
}
});
// Кожен контекст може мати власні мережеві параметри
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://httpbin.org/ip');
await browser.close();
})();
Playwright коректно обробляє SOCKS5-проксі з аутентифікацією "з коробки". Достатньо вказати префікс socks5:// у параметрі server:
const context = await browser.newContext({
proxy: {
server: 'socks5://185.130.5.15:1080',
username: 'proxy_user',
password: 'proxy_password'
}
});
При автоматизації вибір типу ротації залежить від завдань:
Використання проксі не гарантує анонімності, якщо сам браузер видає свою природу через WebRTC або заголовок Chromium. За замовчуванням WebRTC може виконувати STUN-запити вхідними каналами, минаючи проксі-сервер, що призводить до витоку реального IP-адреси пристрою.
Щоб мінімізувати витоки в Puppeteer, застосовують комплекси затирання слідів, такі як puppeteer-extra-plugin-stealth, а також примусово вимикають WebRTC через аргументи запуску:
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
args: [
'--proxy-server=http://185.130.5.15:8080',
'--disable-webrtc',
'--enforce-webrtc-ip-permission-check'
]
});
Для стабільного обходу блокувань критично використовувати перевірену мережеву інфраструктуру. Сервіс StableProxy надає високоефективні резидентські та ISP-проксі з підтримкою HTTP/HTTPS та SOCKS5, які гарантують відсутність витоків даних та високий траст з боку захисних систем.
| Параметр конфігурації | Puppeteer | Playwright |
|---|---|---|
| Рівень визначення проксі | Глобально при запуску процесу | На рівні Browser або окремого BrowserContext |
| Передача авторизації | Через окремий async-метод page.authenticate() |
Вбудована у конфігураційний об'єкт proxy |
| Підтримка SOCKS5 з паролем | Потребує додаткових хаків / плагінів | Повна підтримка "з коробки" |
| Ізоляція IP між вкладками | Складна (потрібні окремі процеси) | Легка (різні BrowserContext в одному процесі) |
Хочете бачити наші нові статті в Google? Додайте StableProxy до бажаних джерел.
Метод page.authenticate() у Puppeteer перехоплює HTTP-аутентифікацію на рівні конкретної вкладки. Фонові запити, сервіс-воркери або мережеві запити, які ініціюються до повного завантаження документу, можуть надсилатися раніше, ніж спрацює обробник авторизації. Для вирішення цієї проблеми рекомендується використовувати проксі з прив'язкою до білого списку IP (IP Whitelisting) або застосовувати мережеві перехоплювачі на рівні CDP (Chrome DevTools Protocol).
За замовчуванням Chromium може намагатися резолвити доменні імена через системний DNS-сервер вашого хоста, а не через проксі-вузол. Щоб спрямувати DNS-запити безпосередньо через SOCKS5-проксі, додайте до аргументів запуску Chromium прапор: --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 127.0.0.1" або використовуйте формат префіксу socks5h:// замість socks5://. Позначка h інформує браузер про необхідність делегувати DNS-резолвинг на сторону проксі-сервера.
Зміна IP-адреси вирішує лише проблему репутації мережевого рівня (IP Reputation). Cloudflare використовує також TLS Fingerprinting (JA3/JA4) та аналіз відбитків JavaScript (Canvas, WebGL, AudioContext, наявність атрибута navigator.webdriver). Якщо ваш TLS-хендшейк видає стандартний стековий відбиток Node.js або стандартний Headless Chromium, захист відхилить запит незалежно від якості проксі.
Так. Оскільки Playwright підтримує визначення параметрів проксі на рівні BrowserContext, ви можете створювати нові контексти з новими IP-адресами в межах одного вже запущеного екземпляра браузера (Browser). Це значно економить оперативну пам'ять та ресурси процесора під час масового парсингу.
Найпростіший спосіб автоматизованої перевірки — після ініціалізації проксі перейти на спеціалізований ендпоінт (наприклад, https://api.ipify.org?format=json) або тестові сторінки перевірки WebRTC і зчитати підсумковий вміст сторінки через page.content(). Також можна виконати JS-скрипт всередині контексту сторінки через page.evaluate(), який ініціює RTCPeerConnection і збирає ICE-кандидати, перевіряючи, чи немає серед них вашої реальної локальної або публічної IP.
StableProxy
© StableProxy – 2021 - 2026 – Ukraine
