Cómo configurar un proxy para Puppeteer
El artículo proporciona información útil para cualquiera que desee utilizar proxies con Puppeteer y ofrece buenos consejos para elegir el enfoque adecuado.
Si está utilizando Puppeteer para web scraping, podría ser mejor usar el marco Crawlee, que simplifica el proceso de desarrollo de araña e incluye un conjunto de herramientas para trabajar con proxies.
Puppeteer proxy ejemplo
import puppeteer from 'puppeteer';
(async () => {
const browser = await puppeteer.launch();
const context = await browser.createIncognitoBrowserContext({
proxyServer: "http://127.0.0.1:8080"
});
const page = await context.newPage();
await page.goto('https://example.com/');
console.log(await page.content());
await browser.close();
})();
En el ejemplo anterior, reemplace
http://127.0.0.1:8080
con la URL de su servidor proxy. Si no tiene uno, puede consultar un paquete del proveedor del Proxy Port:Paquete de instalación:
$ npm i @proxyport/proxyport
Crea una instancia de
ProxyPort
y llama al método getProxy()
:import { ProxyPort } from '@proxyport/proxyport';
const proxyPort = new ProxyPort(<API_KEY>);
(async () => {
const proxy = await proxyPort.getProxy();
console.log(proxy);
})();
Si aún no tiene una clave API, ¡no se preocupe! Aquí están algunas instrucciones sobre cómo obtener uno gratis.
Después de seguir los pasos anteriores, debería tener un código que se vea así:
import puppeteer from 'puppeteer';
import { ProxyPort } from '@proxyport/proxyport';
(async () => {
const proxyPort = new ProxyPort(<API_KEY>);
const proxy = await proxyPort.getProxy();
const browser = await puppeteer.launch();
const context = await browser.createIncognitoBrowserContext({
proxyServer: `http://${proxy}`
});
const page = await context.newPage();
await page.goto('https://example.com/');
console.log(await page.content());
await browser.close();
})();
En algunos casos, puede encontrar un error como este:
Error: net::ERR_TIMED_OUT at https://example.com/
Esto ocurre porque está utilizando servidores proxy públicos gratuitos. Para manejar este error, puede usar un enfoque con reintentos. Así es como puedes lograrlo:
import puppeteer from 'puppeteer';
import { ProxyPort } from '@proxyport/proxyport';
(async () => {
const proxyPort = new ProxyPort(<API_KEY>);
const browser = await puppeteer.launch();
for (let i = 0; i < 10; i++) {
const proxy = await proxyPort.getProxy();
const context = await browser.createIncognitoBrowserContext({
proxyServer: `http://${proxy}`
});
const page = await context.newPage();
try {
await page.goto('https://example.com/');
console.log(await page.content());
break;
} catch (e) {
console.log(`failed to load page with proxy: ${proxy}, error: ${e}\n`);
}
}
await browser.close();
})();
Si necesita una rotación de proxy intensiva con Puppeteer, puede considerar revisar el Framework Crawlee, que incluye funciones antibloqueo con rotación de proxy así como soporte para Puppeteer y Playwright.