StableProxy Головна
Menu
Прапор Україна
Авторизація
Проксі для Playwright та Puppeteer: налаштування та конфігурації

Проксі для headless-браузерів (Playwright, Puppeteer): робочі конфігурації

Як правильно налаштувати проксі в Playwright та Puppeteer. Робочі приклади коду, авторизація, SOCKS5, ротація IP та захист від витоків WebRTC.

Proxychi

Proxychi

25 серпня 2026 р.2
Головна/Блог/Проксі для Playwright та Puppeteer: налаштування та конфігурації
    • Конфігурація проксі в Puppeteer
    • Передача через аргументи запуску
    • Авторизація з логіном і паролем
    • Особливості SOCKS5
    • Конфігурація проксі в Playwright
    • Налаштування на рівні контексту
    • Підтримка Playwright proxy SOCKS5
    • Архітектурні нюанси та захист від витоків
    • Sticky Sessions vs Rotating Proxies
    • Захист від витоку реального IP та антидетект
    • Порівняльна таблиця: Puppeteer vs Playwright
25 серпня 2026 р.2

Автоматизація дій у веб-браузерах за допомогою Playwright або Puppeteer без використання проксі-інфраструктури швидко впирається в жорсткі обмеження антифрод-систем. Сучасні захисні комплекси (Cloudflare, Akamai, Datadome) аналізують не лише фінгерпринти, але й репутацію IP-адреси, з якої надходять запити. Без грамотного налаштування мережевого шару будь-який headless-скрипт виявляється після кількох ітерацій, отримуючи масові CAPTCHA або повне блокування доступу.

Правильне підключення проксі в Puppeteer чи Playwright дозволяє розподіляти навантаження, підтримувати сесії та імітувати поведінку реальних користувачів із різних географічних локацій. Розберемо практичні конфігурації підключення та авторизації для обох фреймворків.

Конфігурація проксі в Puppeteer

У 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

Для протоколу SOCKS5 використовується відповідна префіксація в аргументах:

--proxy-server=socks5://185.130.5.15:1080

Якщо проксі SOCKS5 вимагає авторизації, базовий page.authenticate() у деяких версіях Chromium може працювати нестабільно. У таких випадках застосовують сторонні плагіни або перенаправлення через локальний тунель.

Конфігурація проксі в Playwright

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 proxy SOCKS5

Playwright коректно обробляє SOCKS5-проксі з аутентифікацією "з коробки". Достатньо вказати префікс socks5:// у параметрі server:

const context = await browser.newContext({
  proxy: {
    server: 'socks5://185.130.5.15:1080',
    username: 'proxy_user',
    password: 'proxy_password'
  }
});

Архітектурні нюанси та захист від витоків

Sticky Sessions vs Rotating Proxies

При автоматизації вибір типу ротації залежить від завдань:

  • Rotating Proxies (зміна IP на кожен запит): Ідеально підходить для парсингу публічних даних великого обсягу.
  • Sticky Sessions (прив'язка IP на час сесії): Необхідні при роботі з авторизованими акаунтами, кошиками покупок або багатокроковими формами, де раптова зміна IP викликає перевірку безпеки.

Захист від витоку реального IP та антидетект

Використання проксі не гарантує анонімності, якщо сам браузер видає свою природу через 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 vs Playwright

Параметр конфігурації Puppeteer Playwright
Рівень визначення проксі Глобально при запуску процесу На рівні Browser або окремого BrowserContext
Передача авторизації Через окремий async-метод page.authenticate() Вбудована у конфігураційний об'єкт proxy
Підтримка SOCKS5 з паролем Потребує додаткових хаків / плагінів Повна підтримка "з коробки"
Ізоляція IP між вкладками Складна (потрібні окремі процеси) Легка (різні BrowserContext в одному процесі)

Популярні запитання

Чому page.authenticate() у Puppeteer не спрацьовує для фонових запитів чи web-робітників (Web Workers)?

Метод page.authenticate() у Puppeteer перехоплює HTTP-аутентифікацію на рівні конкретної вкладки. Фонові запити, сервіс-воркери або мережеві запити, які ініціюються до повного завантаження документу, можуть надсилатися раніше, ніж спрацює обробник авторизації. Для вирішення цієї проблеми рекомендується використовувати проксі з прив'язкою до білого списку IP (IP Whitelisting) або застосовувати мережеві перехоплювачі на рівні CDP (Chrome DevTools Protocol).

Як примусово спрямувати DNS-запити через SOCKS5-проксі в Headless Chromium?

За замовчуванням Chromium може намагатися резолвити доменні імена через системний DNS-сервер вашого хоста, а не через проксі-вузол. Щоб спрямувати DNS-запити безпосередньо через SOCKS5-проксі, додайте до аргументів запуску Chromium прапор: --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 127.0.0.1" або використовуйте формат префіксу socks5h:// замість socks5://. Позначка h інформує браузер про необхідність делегувати DNS-резолвинг на сторону проксі-сервера.

Чому Cloudflare продовжує блокувати headless-браузер навіть із чистою резидентською проксі?

Зміна IP-адреси вирішує лише проблему репутації мережевого рівня (IP Reputation). Cloudflare використовує також TLS Fingerprinting (JA3/JA4) та аналіз відбитків JavaScript (Canvas, WebGL, AudioContext, наявність атрибута navigator.webdriver). Якщо ваш TLS-хендшейк видає стандартний стековий відбиток Node.js або стандартний Headless Chromium, захист відхилить запит незалежно від якості проксі.

Чи можна динамічно змінювати проксі в Playwright без перезапуску всього процесу браузера?

Так. Оскільки Playwright підтримує визначення параметрів проксі на рівні BrowserContext, ви можете створювати нові контексти з новими IP-адресами в межах одного вже запущеного екземпляра браузера (Browser). Це значно економить оперативну пам'ять та ресурси процесора під час масового парсингу.

Як перевірити, чи немає витоку реального IP через WebRTC під час виконання скрипта?

Найпростіший спосіб автоматизованої перевірки — після ініціалізації проксі перейти на спеціалізований ендпоінт (наприклад, https://api.ipify.org?format=json) або тестові сторінки перевірки WebRTC і зчитати підсумковий вміст сторінки через page.content(). Також можна виконати JS-скрипт всередині контексту сторінки через page.evaluate(), який ініціює RTCPeerConnection і збирає ICE-кандидати, перевіряючи, чи немає серед них вашої реальної локальної або публічної IP.

Loading...
StableProxy

StableProxy

© StableProxy – 2021 - 2026 – Ukraine

Статус серверівПідтримкаFAQВідгукиМануалиБлогAPIРобота
Публічна офертаПолітика конфіденційностіУмови обслуговування
Payment methods