Интеграции · Средний

Использование прокси с Puppeteer и Chrome в безголовом режиме

Укажите прокси при запуске браузера или в поддерживаемом контексте Puppeteer и передайте реквизиты до перехода на страницу. Проверьте выходной IP внутри каждого контекста; независимые сценарии выполняйте в отдельных сессиях.

2 минуты чтения 5 разделов Проверено Редакция Proxy Cyber

Запуск с прокси и аутентификацией#

Node.js
import puppeteer from "puppeteer";

const browser = await puppeteer.launch({
  headless: true,
  args: ["--proxy-server=http://res.proxy-cyber.com:9000", "--no-first-run"],
});
const page = await browser.newPage();
await page.authenticate({ username: "USER-cc-us-sid-run1-ttl-30m", password: "PASS" });

await page.goto("https://api.ipify.org", { waitUntil: "domcontentloaded", timeout: 45000 });
console.log(await page.evaluate(() => document.body.innerText));
await browser.close();

Используйте отдельный идентификатор сессии для каждого независимого сценария, если выданный шлюз поддерживает эту настройку. Допустимый срок и параметры географии проверяйте в реквизитах подключения. Резидентское устройство может отключиться раньше указанного срока: закреплённая сессия не гарантирует один IP на несколько дней. Для постоянного адреса сравните выделенные статические продукты.

Один прокси на браузер#

Флаг запуска --proxy-server задаёт маршрутизацию браузера по умолчанию. В актуальном Puppeteer можно также указать proxyServer в browser.createBrowserContext(), а реквизиты передать через page.authenticate(). Для разных прокси используйте отдельные контексты, для постоянных профилей — разные каталоги данных; проверьте выходной IP каждого контекста.

Блокировка изображений, шрифтов и медиафайлов#

Перехват запросов
await page.setRequestInterception(true);
page.on("request", (req) => {
  const t = req.resourceType();
  if (["image", "media", "font", "stylesheet"].includes(t)) return req.abort();
  req.continue();
});

Согласованность#

  • Установите Accept-Language и часовой пояс в соответствии со страной выходного узла: page.setExtraHTTPHeaders({\"Accept-Language\": \"de-DE,de;q=0.9\"}) и page.emulateTimezone(\"Europe/Berlin\").
  • Предотвратите утечки WebRTC с помощью --force-webrtc-ip-handling-policy=disable_non_proxied_udp в аргументах запуска.
  • Используйте отдельный браузер для каждой учётной записи; сохраняйте его каталог пользовательских данных, чтобы при повторном входе браузер распознавался как то же устройство.

Возможные ошибки#

СимптомПричинаРешение
net::ERR_TUNNEL_CONNECTION_FAILEDШлюз отклонил CONNECT: неверные учётные данные или параметр либо нет выходного узлаВоспроизведите ошибку с cURL -v, чтобы увидеть код шлюза
net::ERR_PROXY_AUTH_UNSUPPORTED / запросы данныхauthenticate() вызван после переходаВызовите page.authenticate до goto
Одинаковый IP-адрес во всех браузерахПовторно используется один идентификатор сессииИспользуйте отдельный -sid- для каждого браузера или не указывайте его
Очень медленная первая загрузкаДомашний выходной IP-адрес и ресурсоёмкая страницаЗаблокируйте ресурсы и увеличьте тайм-аут до 45 с

Частые вопросы#

Может ли Puppeteer использовать SOCKS5 с паролем?

Chrome не поддерживает аутентификацию SOCKS5. Используйте HTTP-прокси на порту 9000 с page.authenticate либо добавьте IP-адрес сервера в белый список и передайте --proxy-server=socks5://res.proxy-cyber.com:9001.

Ваш аккаунт

Управляйте прокси в одном кабинете

Сравнивайте сети, оформляйте заказы и проверяйте баланс и обращения в одном кабинете. Платежи проверяются вручную, а данные для подключения появляются после выдачи.

Создать аккаунт