Cómo configurar un proxy con autenticación en Puppeteer (Node.js)
Actualizado:
Puppeteer controla Chrome y Chromium mediante el DevTools Protocol (CDP) y ofrece una API nativa await page.authenticate({ username, password }) para resolver desafíos HTTP 407. Al combinar --proxy-server=http://ip:port con page.authenticate(), tus scrapers de Node.js se enrutan de forma segura a través de los proxies estáticos de VinaProxy sin requerir extensiones externas.
--proxy-server=http://ip:port + page.authenticate({ username, password })- 1 IP40.000 ₫
- 5+ IPs35.000 ₫
- 10+ IPs25.000 ₫
- 20+ IPs25.000 ₫
- 50+ IPs25.000 ₫
- 100+ IPs25.000 ₫
- 200+ IPs25.000 ₫
- 500+ IPs25.000 ₫
- 1000+ IPs22.000 ₫
- 2000+ IPs20.000 ₫
- 1 IP40.000 ₫
- 5+ IPs35.000 ₫
- 10+ IPs25.000 ₫
- 20+ IPs25.000 ₫
- 50+ IPs25.000 ₫
- 100+ IPs25.000 ₫
- 200+ IPs25.000 ₫
- 500+ IPs25.000 ₫
- 1000+ IPs22.000 ₫
- 2000+ IPs20.000 ₫
Configuración en dos pasos de proxies en Puppeteer
Nunca introduzcas user:pass@ dentro del argumento de inicio --proxy-server. En su lugar, indica el host y el puerto al arrancar y autentica en la instancia de Page:
| Paso | Código en Puppeteer | Propósito técnico |
|---|---|---|
| 1. Lanzar Chromium | puppeteer.launch({ args: ['--proxy-server=http://ip:port'] }) | Apunta la conexión de red de Chromium hacia tu servidor proxy VinaProxy |
| 2. Autenticar la página | await page.authenticate({ username, password }) | Suministra credenciales vía CDP para responder al desafío HTTP 407 |
| 3. Navegar | await page.goto(url, { waitUntil: 'domcontentloaded' }) | Carga la página de destino a través del túnel autenticado |
Rotación de múltiples proxies entre pestañas con proxy-chain
- Ten en cuenta que
page.authenticate()tiene alcance individual por cada pestañaPage; ejecútalo en cada nueva pestaña creada conbrowser.newPage() - Para utilizar diferentes proxies en contextos de incógnito dentro del mismo proceso de Chromium, convierte cada URL
http://user:pass@ip:portcon el paquete npmproxy-chain(anonymizeProxy()) y pásala abrowser.createBrowserContext({ proxyServer }) - Totalmente compatible con
puppeteer-extray el pluginpuppeteer-extra-plugin-stealth
Paso a paso
- 1
Pasa --proxy-server=http://ip:port a puppeteer.launch()
Inicia el navegador con
const browser = await puppeteer.launch({ args: ['--proxy-server=http://ip:port'] });. - 2
Ejecuta await page.authenticate() en la nueva pestaña
Abre una pestaña con
const page = await browser.newPage();y llama aawait page.authenticate({ username: 'USER', password: 'PASS' });. - 3
Comprueba la dirección IP de salida
Navega a
await page.goto('https://vinaproxy.com/api/my-ip');e inspecciona el JSON obtenido. - 4
Cierra adecuadamente el navegador
Al concluir las tareas, llama a
await browser.close();para liberar recursos del sistema.
Preguntas frecuentes
¿Por qué Puppeteer muestra el error ERR_NO_SUPPORTED_PROXIES?
Ocurre cuando intentas incluir credenciales dentro del argumento de inicio: --proxy-server=http://user:pass@ip:port. Mantén solo --proxy-server=http://ip:port e ingresa las credenciales mediante await page.authenticate({ username, password }).
¿Por qué la segunda pestaña creada con browser.newPage() falla con HTTP 407?
El método page.authenticate() se aplica pestaña por pestaña. Antes de navegar en una nueva pestaña, debes invocar await secondPage.authenticate({ username, password }).
¿Los proxies de VinaProxy tienen límite de tráfico en scraping con Chrome headless?
No. Todos los planes de IPv4 dedicada e ISP estático de VinaProxy cuentan con ancho de banda mensual ilimitado.
Impulsa tu flota de Puppeteer en Node.js con IPs estáticas dedicadas
Proxies Dedicated IPv4 y Static ISP ilimitados con activación instantánea en 7 países.
Comprar proxies para Puppeteer