Налаштування проксі в Puppeteer

Проксі в Puppeteer: аргумент --proxy-server, логін через page.authenticate(), окремий фіксований порт для кожного браузера й економія трафіку.

Оновлено · Редакція Prokso

Дані для підключення
Хост
gw.prokso.com
Порт
823 HTTP · 824 SOCKS5 — новий IP на кожен запит · 10000–20000 фіксований IP (sticky-сесія), HTTP(S) і SOCKS5
Логін і пароль
у кабінеті, на сторінці плану

Готові рядки у потрібному форматі генерує кабінет: оберіть країну, тип IP і протокол.

Коротко
  • Хост — gw.prokso.com, порти 823 (HTTP), 824 (SOCKS5), 10000–20000 (фіксований IP, HTTP або SOCKS5)
  • Логін і пароль — у кабінеті на сторінці плану
  • Перевіряйте IP у відповіді самого запиту через проксі: сторінка «Мій IP» у браузері ваш скрипт не перевіряє
Проксі в Puppeteer: коротка відеоінструкція · 0:33

Покрокова інструкція, як підключити проксі Prokso в Puppeteer. Займе кілька хвилин.

Крок 1. Візьміть дані проксі в особистому кабінеті

Відкрийте план і скопіюйте хост gw.prokso.com, порт, логін і пароль. Порт 823 — HTTP, 824 — SOCKS5 (обидва дають новий IP на кожен запит); порти 10000–20000 — фіксований IP (sticky-сесія) до 120 хвилин, працюють і як HTTP, і як SOCKS5 (кожен порт — окрема адреса). Країну задають у логіні: логін__cr.ua.

Блок «Доступ» на сторінці плану: хост, порти, логін і пароль для рядка проксі
Блок «Доступ» на сторінці плану: хост, порти, логін і пароль для рядка проксі

Крок 2. Передайте проксі при запуску

Chromium у Puppeteer бере проксі з аргументу --proxy-server. Вкажіть тільки хост і порт — без логіна.

Крок 3. Авторизуйтеся на сторінці

Логін і пароль передайте через page.authenticate() до першого переходу. Приклад нижче відкриє сторінку й покаже IP проксі.

import puppeteer from "puppeteer";

const browser = await puppeteer.launch({ args: ["--proxy-server=http://gw.prokso.com:823"] });
const page = await browser.newPage();
await page.authenticate({ username: "USERNAME", password: "PASSWORD" });
await page.goto("https://api.ipify.org");
console.log(await page.evaluate(() => document.body.innerText));
await browser.close();

Збережіть код як check.mjs і запустіть node check.mjs.

Крок 4. Один IP на сесію

Для роботи з акаунтами запускайте кожен браузер на своєму фіксованому порту 10000–20000: так cookies і IP не змішаються.

Крок 5. Перевірте IP у запущеному браузері

Приклад із кроку 3 відкриває https://api.ipify.org у браузері Puppeteer і друкує в консоль IP, який бачить сайт, — він має відрізнятися від вашого. Можна відкрити і https://prokso.com/tools/my-ip через page.goto(): там видно ще й країну. Ваш звичайний Chrome іде без проксі й покаже вашу адресу.

Приклад запуску: у виводі — IP проксі, а не ваш. На порту 823 кожен запуск дає нову адресу
Приклад запуску: у виводі — IP проксі, а не ваш. На порту 823 кожен запуск дає нову адресу

Як скоротити витрату трафіку

Браузер завантажує все: картинки, шрифти, відео, рекламу. Для збирання даних це зайве. Перехоплення запитів дає змогу скасувати те, що не потрібне:

await page.setRequestInterception(true);
page.on("request", (req) => {
  // skip heavy resources: they are not needed for data collection
  const skip = ["image", "media", "font"].includes(req.resourceType());
  skip ? req.abort() : req.continue();
});

На сторінках із великою кількістю картинок це скорочує обсяг у кілька разів. Стилі краще не блокувати: без них частина сайтів малює сторінку інакше, і потрібні елементи можуть не з'явитися.

Окремий IP для кожного браузера

Аргумент --proxy-server задається під час запуску й діє на весь браузер. Змінити проксі в запущеному браузері не можна. Щоб отримати інший IP, запустіть ще один браузер з іншим фіксованим портом або перезапустіть поточний.

Для акаунтів додайте до проксі окрему папку профілю через userDataDir: тоді кожен акаунт має свої cookie і свій IP.

Якщо сторінка не відкривається

  • net::ERR_PROXY_CONNECTION_FAILED. Браузер не достукався до проксі: перевірте хост і порт в аргументі запуску.
  • net::ERR_TUNNEL_CONNECTION_FAILED. Проксі відповів відмовою: неправильні логін і пароль або закінчився трафік.
  • net::ERR_INVALID_AUTH_CREDENTIALS. page.authenticate() викликано після переходу або з одруківкою. Викликайте його до першого page.goto().
  • Тайм-аут навігації. Через резидентські адреси сторінки завантажуються довше. Збільште тайм-аут у page.goto().

Розбір перших двох помилок — на сторінках ERR_PROXY_CONNECTION_FAILED і ERR_TUNNEL_CONNECTION_FAILED.

Питання й відповіді

Чи потрібно викликати page.authenticate() для кожної вкладки?

Так. Авторизація задається для сторінки, тому викликайте її для кожної нової вкладки до переходу.

Чи можна обійтися без логіна й пароля?

Так. Додайте IP комп'ютера або сервера в блок «Доступ за IP без пароля» на сторінці плану — тоді <code>page.authenticate()</code> не потрібен.

Чи працює проксі в headless-режимі?

Так, однаково в обох режимах.