ProxyScrape + Puppeteer: Как маршрутизировать Node.js-скраперы через HTTP- и SOCKS5-прокси
Пошаговое руководство по настройке резидентных и датацентровых прокси ProxyScrape в Puppeteer, включая аутентификацию для HTTP-прокси и локальный релей для SOCKS5.
Обзор
Puppeteer — это библиотека Node.js для управления headless Chrome или Chromium. При масштабном скрапинге маршрутизация запросов через прокси необходима, чтобы избежать блокировок по IP и получить доступ к контенту с геоограничениями. В этом руководстве показано, как настроить резидентные и датацентровые прокси ProxyScrape в Puppeteer для протоколов HTTP и SOCKS5. Поскольку Chromium не поддерживает аутентифицированные SOCKS5-прокси напрямую, вы также узнаете, как настроить локальный релей с помощью gost, чтобы связать HTTP-аутентификацию с SOCKS5.
Предварительные требования
- Node.js 18 или новее, установленный на Windows, macOS или Linux.
- Аккаунт ProxyScrape с резидентными или датацентровыми прокси. Запишите хост, порт, имя пользователя и пароль прокси из панели управления ProxyScrape.
- Базовое знакомство с JavaScript и командной строкой.
Шаг 1: Создание нового проекта Node.js
- Создайте новый каталог и инициализируйте проект:
mkdir puppeteer-proxyscrape && cd puppeteer-proxyscrape npm init -y - Установите Puppeteer:
Это загрузит совместимую сборку Chromium.npm install puppeteer
Шаг 2: Настройка HTTP-прокси с аутентификацией
HTTP-прокси ProxyScrape поддерживают аутентификацию по имени пользователя и паролю. Puppeteer может передавать учётные данные прокси с помощью метода page.authenticate().
Создайте файл с именем http-proxy.js:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: [
'--proxy-server=http://proxy.proxyscrape.com:12345' // Замените на ваш хост и порт ProxyScrape
]
});
const page = await browser.newPage();
// Замените на ваше имя пользователя и пароль ProxyScrape
await page.authenticate({
username: 'your-username',
password: 'your-password'
});
await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle2' });
const content = await page.content();
console.log(content);
await browser.close();
})();
Запустите скрипт:
node http-proxy.js
Вывод должен показать IP-адрес прокси, подтверждая правильность настройки.
Шаг 3: Ротация HTTP-прокси для каждого запроса
Для больших объёмов скрапинга ротируйте прокси для каждой страницы или запроса. Храните массив прокси и выбирайте один случайным образом или последовательно.
const proxies = [
{ host: 'proxy1.proxyscrape.com', port: 12345, username: 'user', password: 'pass' },
{ host: 'proxy2.proxyscrape.com', port: 12345, username: 'user', password: 'pass' }
];
function getRandomProxy() {
return proxies[Math.floor(Math.random() * proxies.length)];
}
(async () => {
const proxy = getRandomProxy();
const browser = await puppeteer.launch({
args: [`--proxy-server=http://${proxy.host}:${proxy.port}`]
});
const page = await browser.newPage();
await page.authenticate({ username: proxy.username, password: proxy.password });
await page.goto('https://httpbin.org/ip');
// ...
await browser.close();
})();
Если ваш тариф ProxyScrape предоставляет ротационный эндпоинт (один хост:порт, который меняет IP для каждого запроса), используйте его вместо управления списком.
Шаг 4: Использование SOCKS5-прокси через локальный релей
Chromium поддерживает SOCKS5-прокси, но не поддерживает аутентификацию по имени пользователя и паролю для них. Чтобы использовать SOCKS5-прокси ProxyScrape с аутентификацией, запустите локальный релей, который принимает HTTP без аутентификации и перенаправляет на аутентифицированный SOCKS5-прокси.
-
Установите
gost(простой прокси-релей). В macOS с Homebrew:brew install gostВ Linux скачайте бинарный файл со страницы релизов gost. В Windows скачайте
.exeс той же страницы. -
Запустите
gostс HTTP-листенером и SOCKS5-форвардером:gost -L http://:8080 -F socks5://your-username:[email protected]:1080Замените имя пользователя, пароль, хост и порт на ваши данные SOCKS5 от ProxyScrape.
-
Направьте Puppeteer на локальный HTTP-релей:
const browser = await puppeteer.launch({ args: ['--proxy-server=http://127.0.0.1:8080'] });page.authenticate()не требуется, так как локальный релей выполняет аутентификацию. -
Проверьте с помощью той же проверки
httpbin.org/ip.
Шаг 5: Проверка работы прокси
Используйте надёжный сервис эха IP, чтобы убедиться, что прокси активен и не раскрывает ваш реальный IP:
await page.goto('https://api.ipify.org?format=json');
const body = await page.evaluate(() => document.body.innerText);
console.log(JSON.parse(body).ip);
Сравните возвращённый IP с вашим фактическим IP.
Устранение неполадок
- 407 Proxy Authentication Required: Убедитесь, что
page.authenticate()вызывается передpage.goto(). Для SOCKS5 проверьте правильность учётных данных релея. - ERR_PROXY_CONNECTION_FAILED: Проверьте хост и порт прокси. Для SOCKS5 убедитесь, что релей
gostзапущен и доступен. - Ошибки SSL: Некоторые прокси могут не поддерживать туннелирование HTTPS. Используйте HTTP-прокси для HTTPS-целей или убедитесь, что ваш SOCKS5-прокси поддерживает CONNECT.
- Медленные ответы: Резидентные прокси могут быть медленнее. Увеличьте тайм-ауты с помощью
page.setDefaultNavigationTimeout(60000). - IP не меняется: Если используется статический список прокси, проверьте логику ротации. Если используется ротационный эндпоинт, проверьте, включена ли ротация ProxyScrape в вашей панели управления.
Итог
Вы успешно настроили HTTP- и SOCKS5-прокси ProxyScrape с Puppeteer. Для HTTP-прокси используйте --proxy-server и page.authenticate(). Для SOCKS5 запустите локальный релей с gost для обработки аутентификации. Ротируйте прокси для каждого запроса, чтобы распределить трафик и избежать блокировок. Всегда проверяйте ваш исходящий IP перед запуском большого скрапинга.