Щоб налаштувати проксі для Puppeteer у Node.js, налаштуйте аргументи запуску браузера за допомогою --proxy-server=<proxy_address>:<port>, щоб спрямувати весь трафік браузера через вказаний проксі. Це дозволяє маскувати IP-адресу, націлюватися на географічні регіони або обходити обмеження швидкості та блокування IP під час автоматизованої взаємодії з вебом.
Базова конфігурація проксі
Puppeteer контролює екземпляр Chromium, передаючи налаштування проксі безпосередньо через аргументи командного рядка. Основним аргументом є --proxy-server.
Зазначення проксі-сервера
Аргумент --proxy-server приймає адресу та порт проксі. Протокол (HTTP, HTTPS, SOCKS4, SOCKS5) може бути явно визначений; HTTP зазвичай передбачається, якщо його пропущено.
const puppeteer = require('puppeteer');
async function launchBrowserWithProxy(proxyAddress) {
const browser = await puppeteer.launch({
args: [
`--proxy-server=${proxyAddress}`,
// Optional: For extreme anonymity, consider disabling WebRTC
// '--disable-features=WebRTC'
],
headless: true, // or false for headful
});
const page = await browser.newPage();
return { browser, page };
}
async function runBasicProxyExample() {
const proxy = 'http://your-proxy-ip:port'; // Example: 'http://192.168.1.1:8080' or 'socks5://192.168.1.1:1080'
let browser;
try {
const { browser: launchedBrowser, page } = await launchBrowserWithProxy(proxy);
browser = launchedBrowser; // Assign to outer scope variable for finally block
await page.goto('https://httpbin.org/ip'); // A service to show your external IP
const ipInfo = await page.evaluate(() => document.body.textContent);
console.log('External IP through proxy:', ipInfo);
} catch (error) {
console.error('Error launching browser with proxy:', error);
} finally {
if (browser) {
await browser.close();
}
}
}
runBasicProxyExample();
Замініть your-proxy-ip:port на фактичну IP-адресу та порт вашого проксі-сервера. Переконайтеся, що префікс протоколу (наприклад, http://, socks5://) відповідає вашому типу проксі.
Автентифіковані проксі
Багато проксі-сервісів вимагають автентифікації. Puppeteer обробляє це за допомогою page.authenticate() після ініціалізації браузера та сторінки, надсилаючи заголовки HTTP Basic authentication до проксі.
Методи автентифікації проксі
page.authenticate(): Рекомендовано для HTTP Basic authentication з Puppeteer.username:password@ip:portу--proxy-server: Хоча деякі інструменти підтримують цей формат безпосередньо,page.authenticate()є стандартним підходом Puppeteer для автентифікації.
const puppeteer = require('puppeteer');
async function launchBrowserWithAuthenticatedProxy(proxyAddress, username, password) {
const browser = await puppeteer.launch({
args: [`--proxy-server=${proxyAddress}`],
headless: true,
});
const page = await browser.newPage();
// Authenticate with the proxy
await page.authenticate({ username, password });
return { browser, page };
}
async function runAuthenticatedProxyExample() {
const proxy = 'http://your-authenticated-proxy-ip:port';
const proxyUsername = 'your_username';
const proxyPassword = 'your_password';
let browser;
try {
const { browser: launchedBrowser, page } = await launchBrowserWithAuthenticatedProxy(proxy, proxyUsername, proxyPassword);
browser = launchedBrowser;
await page.goto('https://httpbin.org/ip');
const ipInfo = await page.evaluate(() => document.body.textContent);
console.log('External IP through authenticated proxy:', ipInfo);
} catch (error) {
console.error('Error with authenticated proxy:', error);
} finally {
if (browser) {
await browser.close();
}
}
}
runAuthenticatedProxyExample();
Стратегії ротації проксі
Для великомасштабного скрапінгу один проксі може призвести до обмеження швидкості. Ротація проксі передбачає перемикання між кількома проксі-серверами для розподілу запитів та підтримки анонімності.
Впровадження ротації проксі
- Ведення списку проксі: Зберігайте доступні проксі в масиві, включаючи дані автентифікації, якщо необхідно.
- Логіка вибору: Реалізуйте стратегію вибору проксі для кожного нового екземпляра браузера або запиту. Поширені стратегії: Round-Robin, випадковий вибір, зважена ротація.
const puppeteer = require('puppeteer');
// Example list of proxies, some with authentication details
const proxyConfigurations = [
{ address: 'http://proxy1.example.com:8080' },
{ address: 'http://auth-proxy1.example.com:8080', username: 'userA', password: 'passA' },
{ address: 'socks5://proxy3.