Настройка прокси в Puppeteer
Добавьте ротационные прокси в скрапинг на headless Chrome с Puppeteer.
Puppeteer управляет headless Chrome для скрапинга страниц с обилием JavaScript. Задайте прокси при запуске браузера - все страницы, открываемые этим экземпляром браузера, пойдут через SotaProxy.
Руководство по настройке
Установите Puppeteer
npm install puppeteerPuppeteer автоматически устанавливает встроенную версию Chromium.
Запуск с прокси
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy.sotaproxy.com:10000'],
});
const page = await browser.newPage();
// Authenticate the proxy
await page.authenticate({
username: 'YOUR_USERNAME',
password: 'YOUR_PASSWORD',
});
await page.goto('https://httpbin.org/ip');
const content = await page.content();
console.log(content);
await browser.close();
})();Задайте --proxy-server в аргументах запуска и вызовите page.authenticate() с вашими учётными данными. Puppeteer требует задавать учётные данные на каждую страницу, а не на браузер.
Гео-таргетинг
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy.sotaproxy.com:10000'],
});
const page = await browser.newPage();
await page.authenticate({
username: 'YOUR_USERNAME_c_FR', // French IP
password: 'YOUR_PASSWORD',
});Добавьте _c_XX к имени пользователя в page.authenticate() для таргетинга на конкретную страну.
Автоматизируй через SotaProxy API
Всё описанное выше работает без открытия дашборда. С API-ключом Puppeteer может получать свежие данные прокси, покупать новые и продлевать истекающие - прямо из кода.
const API = 'https://api.sotaproxy.com/api/v1'
const H = { Authorization: 'Bearer sk_live_your_key' }
// Every active proxy on your account - no copy-pasting credentials
const { proxies } = await (await fetch(`${API}/proxies`, { headers: H })).json()
const p = proxies[0]
const proxyUrl = `http://${p.login}:${p.password}@${p.ip}:${p.portHttp}`
// Buy more when you scale (price-check first with POST /quote)
await fetch(`${API}/orders`, {
method: 'POST',
headers: { ...H, 'Content-Type': 'application/json', 'Idempotency-Key': 'my-unique-order-id' },
body: JSON.stringify({ product: 'ipv4', countryId: 565, periodId: '1m', quantity: 5 }),
})Почему Puppeteer требует двух шагов
Chromium берёт прокси из флага запуска, а в этом флаге нет места для учётных данных. Авторизация происходит потом и на каждой странице:
Прокси задаётся на весь процесс браузера, поэтому один браузер это один адрес. Когда нужно несколько личностей параллельно, запускайте несколько браузеров.
Один браузер на адрес
Запускайте с точкой входа, затем вызывайте page.authenticate до первого перехода:
Node: браузер на личность
const puppeteer = require('puppeteer');
async function browserFor(sessionId) {
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy.sotaproxy.com:10000'],
});
const page = await browser.newPage();
await page.authenticate({
username: `login_c_US_s_${sessionId}_ttl_1h`,
password: 'password',
});
return { browser, page };
}
const { page } = await browserFor(7);
await page.goto('https://example.com', { timeout: 30000 });- Вызывайте authenticate на каждой новой странице, а не один раз на браузер. Открытая позже страница стартует без авторизации, и первый запрос вернётся с 407.
- Используйте отдельную папку профиля на каждый браузер. Иначе профили делят куки, и разделение адресов не даёт ничего.
- Закрывайте браузеры, с которыми закончили. Каждый держит открытое соединение с нашей точкой входа, и утечка здесь потом выглядит как упор в лимит.
- Для многих параллельных личностей контексты Playwright дешевле браузеров Puppeteer. Присмотритесь к этому, когда счёт переваливает за десяток.
Особенности Puppeteer
Учётные данные во флаге запуска не работают
--proxy-server принимает только хост и порт. Всё, что стоит до собаки, молча отбрасывается, и вы получаете 407.
Один прокси на процесс браузера
Прокси на контекст здесь не существует. Ротация означает запуск ещё одного браузера, и поэтому тяжёлой ротации место в Playwright.
authenticate действует на страницу
Новым вкладкам и всплывающим окнам нужен свой вызов, и потоки OAuth со всплывающим окном без него ломаются.
Определение headless это отдельная задача
Прокси чинит адрес, а не отпечаток. Дополняйте его стелс-мерами или антидетект-браузером, если работаете с аккаунтами.
Заметки и советы
- •Puppeteer требует page.authenticate() для каждой новой страницы. Playwright обрабатывает аутентификацию на уровне браузера (проще для многостраничных сессий).
- •Рассмотрите puppeteer-extra и puppeteer-extra-plugin-stealth для снижения детекции по отпечатку.
- •Для высоконагруженного скрапинга рассмотрите Playwright - он чище обрабатывает конфигурацию прокси на несколько контекстов.
FAQ
В чём разница между Puppeteer и Playwright для работы с прокси?
Playwright поддерживает конфигурацию прокси на уровне контекста браузера (чище для мультисессионных сетапов). Puppeteer требует аутентификации на каждую страницу. Оба работают с SotaProxy.
Может ли Puppeteer справляться с CAPTCHA?
Puppeteer не решает CAPTCHA нативно. Резидентные прокси снижают частоту CAPTCHA. Для оставшихся задач интегрируйте сервис решения CAPTCHA (2Captcha, Anti-Captcha).
Похожие интеграции
Получи учётные данные прокси
Зарегистрируйся, пополни баланс и скопируй эндпоинт в Puppeteer. Займёт менее 5 минут.
Начать