Puppeteer es una de las bibliotecas de Node.js más populares y una potente herramienta para automatizar tareas como el scraping web, las pruebas, la investigación de SEO o el seguimiento de precios a través de los navegadores Chrome o Chromium. Si alguna vez has trabajado con un flujo de trabajo automatizado a gran escala, ya sabes lo molesto que resulta: los sitios web limitan la velocidad y restringen tu conexión, bloquean las solicitudes al instante o incluso añaden tu IP a una lista negra por completo.
Estas complicaciones no solo acaban costándote un tiempo y un dinero muy valiosos, sino que pueden afectar en gran medida a la puntuación de confianza de tu dirección personal y, a su vez, a cualquier iniciativa online futura. Por suerte, existe un método que resuelve estos problemas sin esfuerzo, al tiempo que ayuda a eludir las restricciones geográficas y a distribuir solicitudes automatizadas para conseguir una mayor tasa de éxito y una mayor velocidad de conexión. Me refiero, obviamente, a los proxies.
En este artículo, veremos exactamente por qué necesitas proxies y qué tipo requiere tu tarea, repasaremos la configuración básica, la autenticación y la importancia de los protocolos. Además, te recomendaré un proveedor excelente que me ha funcionado especialmente bien en mis propios procesos de automatización.
¿Qué es un titiritero proxy y por qué necesitas uno?
Un proxy de Puppeteer actúa como intermediario entre tu script automatizado y el sitio web al que te diriges. Al enrutar tus solicitudes a través del servidor dedicado del proveedor, el proxy oculta tu dirección IP real, de modo que el sitio de destino ve la IP del proxy, no la tuya.
Aun así, el enmascaramiento de la dirección IP es solo la punta del iceberg. A continuación te ofrecemos una lista completa de las ventajas que un proxy aporta a tu flujo de trabajo con Puppeteer:
- Cómo evitar los bloqueos de IP, la limitación de velocidad y la restricción de tráfico: los sitios web suelen restringir el acceso a las direcciones IP que realizan un gran número de solicitudes consecutivas. Si no se bloquea directamente, tu conexión puede ralentizarse considerablemente o verse inundada de CAPTCHAs. Un conjunto bien configurado de proxies rotativos resuelve este problema: incluso si se bloquea una de tus direcciones IP, otra ocupa su lugar para garantizar un flujo de trabajo ininterrumpido.
- Cómo eludir las restricciones geográficas: Una gran parte del contenido de Internet está oculto tras restricciones geográficas o se modifica en función de la ubicación desde la que se realiza la solicitud. Los proxies residenciales te permiten obtener una dirección de cualquier parte del mundo con precisión milimétrica (estados, ciudades o códigos postales concretos) y navegar como si estuvieras físicamente en esa región.
- Mejora de las tasas de éxito de las solicitudes: distribuir las solicitudes entre un conjunto de proxies reduce drásticamente las conexiones fallidas y los tiempos de espera, especialmente en tareas de scraping intensivas.
Esto resulta extremadamente útil, por no decir fundamental, en:
- El web scraping a gran escala
- Verificación de anuncios
- Supervisión de SEO
- Control de calidad y pruebas
- Localización
En resumen, si utilizas Puppeteer para algo más que una simple prueba puntual, los proxies son imprescindibles: una red de proxies de alta calidad suele marcar la diferencia entre un script frágil y un flujo de datos fiable.
Puppeteer: ¿Usar VPN o proxy? ¿Cuál elegir?
Al hablar de herramientas para eludir restricciones, siempre surge la misma pregunta: ¿qué es mejor, un proxy o una VPN? Ambas tienen sus ventajas y desventajas, y ambas ofrecen resultados sorprendentes si se usan correctamente y para el caso de uso adecuado. Dado que en este artículo nos centramos específicamente en la automatización con Puppeteer, analicemos qué herramienta se adapta mejor a los flujos de trabajo de Puppeteer.
Desde el punto de vista del usuario, las VPN y los proxies son bastante similares: ambos ocultan tu dirección IP asignándote una nueva. Sin embargo, ahí es donde terminan las similitudes. Una VPN desvía todo el tráfico de tu dispositivo a través de un túnel cifrado para conectarte al servidor del proveedor. Desde allí, puedes navegar por toda la web a tu antojo.
Los servidores proxy, por su parte, ocultan tu dirección IP solo ante una página web o aplicación (aquella a la que te estás conectando) cada vez, mientras que el cifrado viene determinado por el protocolo elegido: HTTP no ofrece cifrado alguno, HTTPS se utiliza para un cifrado básico y SOCKS5 para un cifrado máximo.
¿Por qué es importante?
Estas dos diferencias principales son las que más distinguen a las herramientas de elusión a la hora de utilizarlas. El cifrado de las VPN las convierte en una opción ideal para la privacidad y el anonimato personales en Internet, mientras que la menor carga de los proxies les permite mantener altas velocidades y gestionar grandes cantidades de tráfico de usuarios de forma simultánea. Además, al redirigir todo tu tráfico, una VPN solo puede proporcionarte una dirección IP a la vez, mientras que los proxies ofrecen tantas conexiones simultáneas como desees.
Aquí tienes una tabla comparativa para que te hagas una idea más clara:
| VPN | Proxy | |
| Enmascaramiento de direcciones IP | Sí | Sí |
| Cifrado | Sí, todo el tráfico del dispositivo | Solo con el protocolo SOCKS5, por sitio web o por aplicación |
| Velocidad | Media | Alta |
| Conexiones simultáneas | Una dirección IP a la vez | Varias direcciones IP simultáneas |
| Control de rotación | Limitado | Integrado |
| Precisión de la segmentación geográfica | Limitada (a nivel de país) | Ciudad, provincia, código postal, a nivel de ASN (dependiendo del proveedor) |
| Gestión de CAPTCHA/bloqueos | Se requiere intervención manual | Se gestiona mediante rotación automática |
| Escalabilidad | Limitada | Altamente escalable |
| Ideal para | Uso personal | Automatización a gran escala |
Aunque las VPN pueden integrarse, en principio, en tu script de Puppeteer, el resultado de esta iniciativa dista mucho de ser el ideal. En otras palabras, las VPN son más adecuadas para la navegación individual, mientras que los proxies están diseñados específicamente para la automatización, el scraping, las pruebas y la recopilación de datos a gran escala.
Cómo utilizar un proxy en Puppeteer: configuración básica con Floppydata
Ahora, pasemos a la sección del artículo dedicada a la configuración del proxy y a la integración con Puppeteer. Para facilitar la configuración y la demostración del proxy, utilizaré Floppydata.
Floppydata lleva ya un tiempo siendo mi proveedor de proxies de referencia. El servicio garantiza un tiempo de actividad constante del 99,99 % y altos índices de fiabilidad, lo que permite una conexión ininterrumpida para cualquier flujo de trabajo automatizado. Además de un rendimiento extraordinario, Floppydata ofrece uno de los mejores precios del mercado: solo 1 $/GB para direcciones IP rotativas y 5 $/IP para proxies de ISP. Esto hace que el servicio sea ideal para usuarios que realizan operaciones a gran escala o con gran volumen de datos, sin dejar de lado su presupuesto.

El primer paso para integrar proxies en tu script de Puppeteer es conseguir un proxy. Con Floppydata solo hace falta un par de clics.
Una vez que hayas iniciado sesión, accederás al panel de control de Floppydata. En primer lugar, elige un plan adecuado y procede al pago. Para los flujos de trabajo automatizados, te recomiendo el plan «Rotating proxy», que incluye tres tipos de direcciones IP (residenciales, móviles y de centro de datos) entre las que puedes cambiar cuando te convenga.
Los siguientes pasos no pueden ser más sencillos; aunque no estés muy familiarizado con los servicios de proxy, la interfaz intuitiva de Floppydata te garantiza que no te perderás.
Ve a la pestaña «Obtener credenciales de proxy» en la barra lateral izquierda. Allí se te proporcionarán un nombre de usuario y una contraseña asociados a tu cuenta, pero, a efectos de esta demostración, vamos a crear un perfil específico para Puppeteer; esto generará un nuevo proxy con la autenticación ya integrada. Como puedes ver, puedes crear tantos subusuarios independientes como desees, lo que simplifica enormemente los procesos de gestión posteriores.
A continuación, solo tienes que seleccionar los parámetros necesarios de las listas desplegables que aparecen. A medida que vas introduciendo los datos, estos se van incorporando simultáneamente a la cadena de proxy. Cuando estés satisfecho con los parámetros, solo tienes que copiar un fragmento de código o la cadena de proxy.
Para esta demostración, centrémonos en cómo funciona la configuración básica con una cadena de proxy. Aquí tienes un fragmento de código para una integración de proxy:
Proxy de Puppeteer con autenticación: método «page.authenticate»
Instalación:
npm install puppeteer
Configuración básica:
const puppeteer = require('puppeteer');
(async () => {
const PROXY_USER = 'user123-type-residential-country-US-session-pup01';
const PROXY_PASS = 'your_password';
const PROXY_SERVER = 'geo.g-w.info:10080';
const browser = await puppeteer.launch({
args: [`--proxy-server=${PROXY_SERVER}`]
});
const page = await browser.newPage();
// Authenticate
await page.authenticate({
username: PROXY_USER,
password: PROXY_PASS
});
// Navigate
await page.goto('https://httpbin.org/ip');
const content = await page.content();
console.log(content);
await browser.close();
})();
Una vez configurado el código, solo tienes que copiar y pegar tus credenciales de proxy desde el panel de control de Floppydata en los lugares correspondientes: tu nombre de usuario (la cadena completa que hemos copiado en el GIF anterior) en PROXY_USER y la contraseña en PROXY_PASS. PROXY_SERVER sigue un sencillo hostname:port formato, en el que el nombre de host es geo.g-w.info y los rangos de puertos vienen definidos por el protocolo elegido: 10080 para HTTP, 10443 para HTTPS y 10800 para SOCKS5.
Este método también incluye autenticación nativa, compatible tanto con HTTP como con HTTPS: introduce tu nombre de usuario y contraseña en page.authenticate para integrar tu proxy con la autenticación de forma inmediata, sin necesidad de configuraciones adicionales ni de nuevas páginas.
Autenticación mediante cadena de proxies
Otro método de autenticación mediante proxy, utilizado principalmente para mensajes de error personalizados, respuestas personalizadas y la medición de estadísticas de tráfico, o si necesitas integrar credenciales directamente en la URL del proxy, es el paquete npm proxy-chain. La parte fundamental de este método es anonymizeProxy(proxy), que inicia un servidor proxy local.
Instalación:
npm install proxy-chain
Configuración:
const puppeteer = require('puppeteer');
const proxyChain = require('proxy-chain');
const PROXY_SERVER = 'geo.g-w.info:10080';
const PROXY_USER = 'user123-type-residential-country-US-session-pup01';
const PROXY_PASS = 'your_password';
(async () => {
const proxy = `http://${PROXY_USER}:${PROXY_PASS}@${PROXY_SERVER}`;
const anonymizedProxy = await proxyChain.anonymizeProxy(proxy);
const browser = await puppeteer.launch({
args: [`--proxy-server=${anonymizedProxy}`],
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
await page.screenshot({ path: 'example2.png' });
await browser.close();
await proxyChain.closeAnonymizedProxy(anonymizedProxy, true);
})();
Para este método necesitarás las mismas credenciales que antes, además de la URL de tu proxy con el siguiente formato: Protocol://Username:Password@Hostname:Port. Puedes encontrar una cadena lista para usar en el panel de control de Floppydata, justo debajo de la configuración del proxy: haz clic en «Cadenas de proxy», luego en «Como lista» y elige el formato que prefieras de entre los que aparecen en la lista desplegable.

Uso de un proxy con Puppeteer a gran escala: prácticas recomendadas para la integración de un proxy con Puppeteer
Una vez que la configuración básica del proxy funcione, puedes pasar a ampliar tu flujo de trabajo para la producción. En este caso, un único proxy estático no será suficiente; veamos cómo configurar un grupo de proxies rotativos en Puppeteer.
Rotación aleatoria
Instalación:
npm install puppeteer
Configuración:
const puppeteer = require('puppeteer');
const PROXY_PASS = 'your_password';
const PROXY_SERVER = 'geo.g-w.info:10080';
const PROXY_POOL = [
'user123-type-residential-country-US-session-pup01',
'user123-type-residential-country-US-session-pup02',
'user123-type-residential-country-US-session-pup03',
'user123-type-residential-country-US-session-pup04',
];
const getRandomProxy = () => PROXY_POOL[Math.floor(Math.random() * PROXY_POOL.length)];
const urls = [
'https://httpbin.org/ip',
'https://httpbin.org/ip',
'https://httpbin.org/ip',
];
(async () => {
for (const url of urls) {
const PROXY_USER = getRandomProxy();
const browser = await puppeteer.launch({
args: [`--proxy-server=${PROXY_SERVER}`]
});
const page = await browser.newPage();
await page.authenticate({
username: PROXY_USER,
password: PROXY_PASS
});
await page.goto(url);
const content = await page.content();
console.log(`Request via ${PROXY_USER}:`, content);
await browser.close();
}
})();
Como puedes ver, la principal diferencia aquí es que, en lugar de « PROXY_USER », estamos utilizando « PROXY_POOL ». Al mismo tiempo, estamos añadiendo una lógica de rotación aleatoria mediante « Math.floor(Math.random() * PROXY_POOL.length) ».
Rotación secuencial
Instalación:
npm install puppeteer
Configuración:
const puppeteer = require('puppeteer');
const PROXY_PASS = 'your_password';
const PROXY_SERVER = 'geo.g-w.info:10080';
const PROXY_POOL = [
'user123-type-residential-country-US-session-pup01',
'user123-type-residential-country-US-session-pup02',
'user123-type-residential-country-US-session-pup03',
'user123-type-residential-country-US-session-pup04',
];
let proxyIndex = 0;
const getNextProxy = () => {
const proxy = PROXY_POOL[proxyIndex % PROXY_POOL.length];
proxyIndex++;
return proxy;
};
const urls = [
'https://httpbin.org/ip',
'https://httpbin.org/ip',
'https://httpbin.org/ip',
];
(async () => {
for (const url of urls) {
const PROXY_USER = getNextProxy();
const browser = await puppeteer.launch({
args: [`--proxy-server=${PROXY_SERVER}`]
});
const page = await browser.newPage();
await page.authenticate({
username: PROXY_USER,
password: PROXY_PASS
});
await page.goto(url);
const content = await page.content();
console.log(`Request via ${PROXY_USER}:`, content);
await browser.close();
}
})();
Aquí estamos utilizando una función « getNextProxy() » que emplea un contador « proxyIndex » con un operador módulo (%) para recorrer el conjunto de forma ordenada.
Proxy SOCKS de Puppeteer: lo que debes saber
el protocolo Socket Secure (SOCKS), y Proxies SOCKS5 En concreto, funcionan a un nivel de red inferior al de los proxies HTTP/HTTPS. Lo que los distingue de otros protocolos es su capacidad para gestionar cualquier tipo de tráfico, desde la navegación web estándar hasta el correo electrónico, las transferencias de archivos, las conexiones P2P y los flujos de datos en tiempo real. Esto es posible porque el protocolo SOCKS no interpreta ni filtra el tráfico como lo hacen los proxies HTTP, sino que simplemente transmite paquetes TCP y UDP sin modificar. Además, los proxies SOCKS5 ofrecen el máximo nivel de cifrado que la propia capa de proxy puede proporcionar.
En el contexto de Puppeteer, los proxies SOCKS5 presentan un par de ventajas claras. Su reenvío de paquetes a bajo nivel se traduce en menos errores y una menor latencia bajo cargas intensas, lo que resulta de gran ayuda a la hora de ejecutar procesos de scraping a gran escala. Dado que Puppeteer puede interactuar con una amplia gama de tareas más allá de la navegación web estándar, incluyendo el manejo de archivos multimedia, conexiones WebSocket y tráfico no HTTP, los proxies SOCKS5 son la opción ideal, gracias a su capacidad para gestionar múltiples protocolos en lugar de limitarse únicamente al tráfico web.
Sin embargo, hay un inconveniente. El motor de Puppeteer, Chromium, no admite de forma nativa la autenticación de proxy SOCKS5 que requieren la mayoría de los proxies comerciales, incluido Floppydata. Si intentas utilizar el método habitual « page.authenticate », lo más probable es que aparezca el mensaje « ERR_NO_SUPPORTED_PROXIES » o que el navegador recurra a una conexión directa, lo que dejaría al descubierto tu IP real.
Aun así, las direcciones IP SOCKS5 se pueden integrar en tu script de Puppeteer y autenticarse mediante el método proxy-chain. proxy-chain funciona en este caso porque crea un túnel HTTP local que se encarga de la autenticación SOCKS5 por ti; Chromium nunca tiene que gestionarla directamente. La configuración en este caso es un poco diferente:
Instalación:
npm install proxy-chain
Configuración:
const puppeteer = require('puppeteer');
const proxyChain = require('proxy-chain');
const PROXY_USER = 'user123-type-residential-country-US-session-pup01';
const PROXY_PASS = 'your_password';
const PROXY_HOST = 'geo.g-w.info';
const PROXY_PORT = '10800';
(async () => {
const proxy = `socks5://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}`;
const anonymizedProxy = await proxyChain.anonymizeProxy(proxy);
const browser = await puppeteer.launch({
args: [`--proxy-server=${anonymizedProxy}`],
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
const content = await page.content();
console.log(content);
await browser.close();
await proxyChain.closeAnonymizedProxy(anonymizedProxy, true);
})();
Es importante tener en cuenta que, en este caso, PROXY_PORT cambia a 10800 para el protocolo SOCKS5 y que la propia dirección del proxy comienza por socks5://, no por http://.
Conclusión
Los proxies son una parte esencial de cualquier configuración seria de automatización con Puppeteer. En esta guía, hemos abordado las razones fundamentales para utilizarlos, cómo se comparan con las VPN y hemos repasado todos los métodos de integración principales, desde la autenticación básica hasta los grupos rotativos y la configuración de SOCKS5 con proxy-chain. Con un proveedor fiable como Floppydata y la configuración adecuada para tu caso de uso, dispondrás de un flujo de trabajo resistente y escalable capaz de gestionar cualquier exigencia de tu flujo de trabajo.
Comparta este artículo:
Índice de contenidos
Proxies a 1 $
Obtenga posibilidades ilimitadas