Гайд з Puppeteer · 1 хв читання

Налаштування проксі у Puppeteer з автентифікацією

Puppeteer приймає адресу проксі як прапорець запуску, а логін і пароль передаються зовсім інакше — через page.authenticate(). Показуємо правильний патерн для проксі s4m із повним кодом на Node.

Чому самого прапорця замало

Chromium — браузер, яким керує Puppeteer, — приймає проксі через прапорець командного рядка --proxy-server. Заковика в тому, що формат цього прапорця не приймає облікові дані всередині: написати --proxy-server=http://USER:PASS@host:3128 і сподіватися, що спрацює, не вийде. Коли проксі вимагає автентифікацію, Chromium піднімає системне вікно запиту пароля, на яке headless-браузер сам відповісти не може.

Відповідь Puppeteer — page.authenticate({ username, password }). У прапорці запуску ви вказуєте лише хост і порт, облікові дані віддаєте сторінці, і далі Puppeteer сам відповідає на виклик проксі 407 Proxy Authentication Required. Для s4m це означає запуск з --proxy-server=http://proxy.s4m.online:3128 і автентифікацію вашими USER:PASS. HTTP-ендпоінт (порт 3128) тут правильний вибір: проксі-прапорець Chromium розуміє і HTTP, і SOCKS, але автентифікований SOCKS5 у браузері — суцільна морока, тож HTTP надійніший. Дивіться огляд проксі і гайд про автентифікацію на проксі.

Запуск Puppeteer з автентифікацією

Хост проксі йде у прапорець запуску, USER:PASS — через page.authenticate(). Перед запуском підставте свої облікові дані.

javascript
// npm install puppeteer
const puppeteer = require("puppeteer");

const HOST = "proxy.s4m.online";
const PORT = 3128;             // HTTP proxy endpoint
const USER = "USER";
const PASS = "PASS";

(async () => {
  const browser = await puppeteer.launch({
    headless: "new",
    args: [
      `--proxy-server=http://${HOST}:${PORT}`,
      // credentials are NOT allowed here — see page.authenticate below
      "--no-sandbox",
    ],
  });

  const page = await browser.newPage();

  // This answers the proxy's 407 challenge:
  await page.authenticate({ username: USER, password: PASS });

  await page.goto("https://api.ipify.org?format=json", {
    waitUntil: "networkidle0",
    timeout: 30000,
  });
  console.log("Exit IP:", await page.evaluate(() => document.body.innerText));

  await browser.close();
})();

Те, на чому люди спотикаються

Помилки, які обертаються порожньою сторінкою або 407.

Облікові дані — сторінці

Ніколи не пишіть USER:PASS у --proxy-server: Chromium їх ігнорує. Завжди викликайте page.authenticate() перед першим переходом, один раз на сторінку.

Беріть HTTP-ендпоінт

Автентифікований SOCKS5 у браузері працює ненадійно. Спрямуйте --proxy-server на http://proxy.s4m.online:3128, а вхід залиште page.authenticate.

Автентифікація до goto

Викликайте page.authenticate() до page.goto(), інакше перший запит прийде на проксі без облікових даних і поверне 407.

Один контекст — одна ідентичність

Кожен контекст браузера несе власну автентифікацію. Якщо потрібно кілька ідентичностей, піднімайте окремі контексти, а не переавтентифіковуйте спільну сторінку.

Блокування, відбитки і чесність

Проксі ховає вашу IP, але не ховає того, що ви автоматизуєте браузер. Сучасні анти-бот системи дивляться ще й на властивості navigator, тайминги і відбитки TLS. Якщо ціль розпізнала headless Chromium, самим проксі це не полагодити: доведеться виставляти реалістичні viewport і User-Agent, тримати людський темп — та й тоді частина сайтів для автоматизації просто закрита.

Будьте чесні й щодо типу проксі: у s4m вони серверні, і це чудово для тестів, моніторингу й помірно захищених сайтів, але цілі з серйозним захистом можуть блокувати серверні діапазони. Коли потрібен один стабільний вихід для логіна чи білого списку, додайте виділену персональну IP. Волієте Playwright? Схема майже та сама — дивіться гайд про проксі в Playwright. Перевірити свій вихід можна інструментами, а прототипувати — на безкоштовному списку проксі.

FAQ

Відповіді на питання

Чому мій запит із Puppeteer повертає 407?

Бо проксі вимагає автентифікацію, а ви на неї не відповіли. Викличте page.authenticate({ username, password }) до першого page.goto() — облікові дані у прапорці --proxy-server Chromium ігнорує.

Чи може Puppeteer працювати через SOCKS5?

Проксі-прапорець Chromium уміє вказувати на SOCKS, але автентифікований SOCKS5 у браузері працює ненадійно. Для передбачуваного налаштування беріть HTTP-ендпоінт на порту 3128 разом із page.authenticate().

Чи треба автентифікувати кожну сторінку?

Так — викликайте page.authenticate() один раз на сторінку (або на контекст браузера) перед переходом. Кожен контекст несе власні облікові дані.

Чи врятує проксі від виявлення бота?

Ні. Проксі змінює лише вашу IP. Анти-бот системи дивляться ще й на відбитки браузера та поведінку, тож проксі — умова необхідна, але недостатня проти агресивного виявлення.

Запускайте headless Chrome через проксі

Автентифіковані серверні проксі на proxy.s4m.online, готові до page.authenticate() у Puppeteer. Оплата за спожите, а для стабільних логінів є виділена IP.

Цю сторінку знаходять за запитами

Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.