Настройка прокси в Puppeteer: полный гайд
Puppeteer управляет headless Chrome из Node.js — идеален для рендеринга SPA, скриншотов и сбора данных с сайтов, где нужен JavaScript. Прокси направляет трафик браузера через внешний IP: полезно для гео-тестов, распределения нагрузки и изоляции сессий. Ниже — рабочие конфигурации для прокси NEONPROXY (HTTPS и SOCKS5). Используйте их только для задач, разрешённых robots.txt и Terms of Service целевых сайтов.
Базовый HTTP-прокси при запуске
Самый простой способ — передать адрес через аргумент --proxy-server. Логин и пароль передаются отдельно через page.authenticate():
const puppeteer = require('puppeteer');
const PROXY_HOST = '123.45.67.89';
const PROXY_PORT = '8080';
const PROXY_USER = 'your_login';
const PROXY_PASS = 'your_password';
(async () => {
const browser = await puppeteer.launch({
headless: 'new',
args: [`--proxy-server=http://${PROXY_HOST}:${PROXY_PORT}`]
});
const page = await browser.newPage();
await page.authenticate({ username: PROXY_USER, password: PROXY_PASS });
await page.goto('https://api.ipify.org?format=json');
console.log(await page.content());
await browser.close();
})();
Убедитесь, что IP в ответе совпадает с ожидаемым — проверьте также через «Мой IP» в обычном браузере с тем же прокси.
SOCKS5 в Puppeteer
Chrome принимает SOCKS5 через тот же аргумент. Для NEONPROXY укажите socks5://host:port:
const browser = await puppeteer.launch({
args: ['--proxy-server=socks5://123.45.67.89:1080']
});
const page = await browser.newPage();
await page.authenticate({ username: PROXY_USER, password: PROXY_PASS });
Разница протоколов — в статье SOCKS5 vs HTTPS.
Ротация пула прокси
Для парсинга публичных страниц запускайте новый browser context на каждый IP или меняйте прокси между задачами. Не ротируйте IP внутри авторизованной сессии — см. ротацию прокси:
const proxies = [
{ host: '1.2.3.4', port: '8080' },
{ host: '5.6.7.8', port: '8080' }
];
async function browseWithProxy(proxy) {
const browser = await puppeteer.launch({
headless: 'new',
args: [`--proxy-server=http://${proxy.host}:${proxy.port}`]
});
const page = await browser.newPage();
await page.authenticate({ username: PROXY_USER, password: PROXY_PASS });
await page.goto('https://example.com', { waitUntil: 'networkidle2' });
const title = await page.title();
await browser.close();
return title;
}
Обход типичных ошибок
ERR_NO_SUPPORTED_PROXIES — неверный формат адреса или SOCKS без поддержки в сборке Chrome. 407 Proxy Authentication Required — забыли page.authenticate(). Timeout — прокси перегружен; проверьте latency в чекере.
Отключите WebRTC-утечки, если тестируете анонимность: Chrome в headless обычно не светит локальный IP, но при полном Chrome добавьте флаги или используйте puppeteer-extra-plugin-stealth осознанно и только в легальных сценариях.
puppeteer-core и удалённый Chrome
В Docker подключайте puppeteer-core к системному Chromium и передавайте те же --proxy-server args. Список прокси можно подгружать из API NEONPROXY при старте воркера.
Выбор типа прокси под задачу
Публичный краулинг с высокой частотой — IPv6 или shared IPv4 с ротацией. Авторизованные кабинеты и соцсети — один приватный IPv4 на сессию. Критерии — в гайде по выбору. Альтернатива Puppeteer — Playwright с встроенной поддержкой proxy в context.
Оформить прокси для проекта — на странице заказа.