Para configurar un proxy para Puppeteer en Node.js, configure los argumentos de lanzamiento del navegador con --proxy-server=<proxy_address>:<port> para enrutar todo el tráfico del navegador a través del proxy especificado. Esto permite el enmascaramiento de direcciones IP, la segmentación geográfica o la elusión de límites de velocidad y prohibiciones de IP durante las interacciones web automatizadas.
Configuración Básica de Proxy
Puppeteer controla una instancia de Chromium, pasando la configuración del proxy directamente a través de argumentos de línea de comandos. El argumento principal es --proxy-server.
Especificar un Servidor Proxy
El argumento --proxy-server acepta la dirección y el puerto del proxy. El protocolo (HTTP, HTTPS, SOCKS4, SOCKS5) puede definirse explícitamente; HTTP se asume típicamente si se omite.
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();
Reemplace your-proxy-ip:port con la dirección IP y el puerto reales de su servidor proxy. Asegúrese de que el prefijo del protocolo (por ejemplo, http://, socks5://) coincida con su tipo de proxy.
Proxies Autenticados
Muchos servicios de proxy requieren autenticación. Puppeteer maneja esto a través de page.authenticate() después de la inicialización del navegador y la página, enviando encabezados de autenticación HTTP Basic al proxy.
Métodos de Autenticación de Proxy
page.authenticate(): Recomendado para autenticación HTTP Basic con Puppeteer.username:password@ip:porten--proxy-server: Aunque algunas herramientas admiten este formato directamente,page.authenticate()es el enfoque estándar de Puppeteer para la autenticación.
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();
Estrategias de Rotación de Proxies
Para el scraping a gran escala, un solo proxy puede llevar a la limitación de velocidad. La rotación de proxies implica cambiar entre múltiples servidores proxy para distribuir las solicitudes y mantener el anonimato.
Implementación de la Rotación de Proxies
- Mantener una Lista de Proxies: Almacene los proxies disponibles en un array, incluyendo los detalles de autenticación si es necesario.
- Lógica de Selección: Implemente una estrategia para elegir un proxy para cada nueva instancia de navegador o solicitud. Estrategias comunes: Round-Robin, Selección Aleatoria, Rotación Ponderada.
```javascript
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.