Estrategias para eludir la protección de Cloudflare con Puppeteer
Aprenda técnicas efectivas para eludir éticamente las protecciones de Cloudflare usando Puppeteer, incluida la gestión de proxy y la simulación de comportamiento humano.

CloudflareLas medidas de seguridad dificultan que los bots accedan a los sitios web. Pero con TitiriteroPuedes eludir estas defensas si lo haces de forma ética. Aquí tienes una guía rápida para empezar:
Técnicas básicas:
- Usa proxies residenciales y rotarlos para evitar ser detectados.
- Imitar el comportamiento humano con retrasos aleatorios y movimientos del mouse.
- Manejar Desafíos de JavaScript y CAPTCHA usando complementos como
puppeteer-extra-plugin-recaptcha. - Disimular la automatización mediante ajustes huellas dactilares del navegador y agentes de usuario.
Configuración del titiritero:
Instalar Puppeteer y complementos:
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealthAgregue configuraciones ocultas para evitar ser detectado:
<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>); <span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>); puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
Recordatorio legalRespete siempre los términos de servicio del sitio web, evite sobrecargar los servidores y utilice la automatización de manera responsable.
Estos pasos pueden mejorar tu probabilidad de éxito frente a las protecciones de Cloudflare. Consulta el artículo para obtener fragmentos de código detallados y técnicas avanzadas.
Nodejs Titiritero Tutorial #7 - Detección de bypass usando ...
Guía de configuración de Puppeteer
Siga estos pasos para configurar Puppeteer con configuraciones y complementos personalizados para navegar por las protecciones de Cloudflare.
Pasos básicos de instalación de Puppeteer
Primero, asegúrate de tener Node.js Tiene instalada la versión 18 o posterior. A continuación, ejecute el siguiente comando para instalar Puppeteer y sus complementos relacionados:
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
A continuación, cree un nuevo archivo JavaScript e importe los módulos necesarios:
<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>);
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
Después de esto, necesitarás ajustar la configuración de inicio del navegador para evitar la detección.
Configuraciones requeridas de Puppeteer
Configure su instancia de navegador con configuraciones que reduzcan la posibilidad de ser marcado:
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">headless</span>: <span class="hljs-literal">false</span>,
<span class="hljs-attr">args</span>: [
<span class="hljs-string">'--no-sandbox'</span>,
<span class="hljs-string">'--disable-setuid-sandbox'</span>,
<span class="hljs-string">'--disable-infobars'</span>,
<span class="hljs-string">'--window-position=0,0'</span>,
<span class="hljs-string">'--ignore-certificate-errors'</span>,
<span class="hljs-string">'--ignore-certificate-errors-spki-list'</span>
]
});
Si desea utilizar un proxy para enmascarar su IP, incluya estas configuraciones adicionales:
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">args</span>: [
<span class="hljs-string">'--proxy-server=http://proxy-address:port'</span>
]
});
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">authenticate</span>({
<span class="hljs-attr">username</span>: <span class="hljs-string">'proxy-username'</span>,
<span class="hljs-attr">password</span>: <span class="hljs-string">'proxy-password'</span>
});
Complementos útiles de Puppeteer
Mejore la funcionalidad de Puppeteer con estos complementos:
| Plugin Name | Proposito | Características clave |
|---|---|---|
| titiritero-extra-plugin-sigilo | Anti-detección | Modifica las huellas dactilares del navegador e imita el comportamiento humano. |
| recaptcha del complemento extra de puppeteer | Manejo de CAPTCHA | Automatiza la resolución de CAPTCHA |
| titiritero-extra-plugin-bloqueador de anuncios | Gestión de recursos | Bloquea anuncios y rastreadores para reducir los riesgos de detección. |
Para integrar estos complementos, utilice el siguiente código:
<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">AdblockerPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-adblocker'</span>);
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">AdblockerPlugin</span>({ <span class="hljs-attr">blockTrackers</span>: <span class="hljs-literal">true</span> }));
Por último, para que tus acciones parezcan más naturales, introduce retrasos aleatorios entre ellas:
<span class="hljs-keyword">const</span> <span class="hljs-title function_">delay</span> = ms => <span class="hljs-keyword">new</span> <span class="hljs-title class_">Promise</span>(<span class="hljs-function"><span class="hljs-params">resolve</span> =></span> <span class="hljs-built_in">setTimeout</span>(resolve, ms));
<span class="hljs-keyword">await</span> <span class="hljs-title function_">delay</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * <span class="hljs-number">1000</span> + <span class="hljs-number">1000</span>); <span class="hljs-comment">// Random delay between 1-2 seconds</span>
sbb-itb-23997f1
Métodos para manejar Cloudflare Seguridad
Mejore su configuración de Puppeteer con estas técnicas para navegar mejor por las defensas de Cloudflare.
Gestión de identidad del navegador
El sistema antibots de Cloudflare monitorea las huellas dactilares del navegador y las señales de automatización. Para ocultar la actividad de Puppeteer, modifique los identificadores y las propiedades del navegador como se muestra a continuación:
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">args</span>: [
<span class="hljs-string">'--window-size=1920,1080'</span>,
<span class="hljs-string">'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'</span>
],
<span class="hljs-attr">ignoreDefaultArgs</span>: [<span class="hljs-string">'--enable-automation'</span>]
});
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">evaluateOnNewDocument</span>(<span class="hljs-function">() =></span> {
<span class="hljs-keyword">delete</span> navigator.<span class="hljs-property">webdriver</span>;
<span class="hljs-title class_">Object</span>.<span class="hljs-title function_">defineProperty</span>(navigator, <span class="hljs-string">'plugins'</span>, {
<span class="hljs-attr">get</span>: <span class="hljs-function">() =></span> [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>]
});
});
Esta configuración elimina los indicadores de automatización e imita una huella digital del navegador estándar, lo que ayuda a eludir las comprobaciones de Cloudflare.
Soluciones al desafío de JavaScript
Para abordar los desafíos de JavaScript de Cloudflare es necesario simular un comportamiento similar al humano. Por ejemplo, puedes esperar a que el formulario de desafío desaparezca e introducir retrasos aleatorios entre acciones:
<span class="hljs-comment">// Wait until the Cloudflare challenge form is gone</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForFunction</span>(<span class="hljs-function">() =></span> {
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">'#challenge-form'</span>) === <span class="hljs-literal">null</span>;
}, { <span class="hljs-attr">timeout</span>: <span class="hljs-number">30000</span> });
<span class="hljs-comment">// Add random delays to simulate human interaction</span>
<span class="hljs-keyword">const</span> <span class="hljs-title function_">randomDelay</span> = (<span class="hljs-params">min, max</span>) => {
<span class="hljs-keyword">return</span> <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * (max - min + <span class="hljs-number">1</span>) + min);
};
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForTimeout</span>(<span class="hljs-title function_">randomDelay</span>(<span class="hljs-number">1000</span>, <span class="hljs-number">3000</span>));
También puedes crear controladores personalizados para simular mejor el comportamiento del usuario según sea necesario. A continuación, necesitarás una estrategia para gestionar los CAPTCHA.
Opciones de gestión de CAPTCHA
Cuando se enfrenta a CAPTCHAs, el uso de un complemento de resolución de CAPTCHA puede simplificar el proceso:
<span class="hljs-keyword">const</span> <span class="hljs-title class_">RecaptchaPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-recaptcha'</span>);
puppeteer.<span class="hljs-title function_">use</span>(
<span class="hljs-title class_">RecaptchaPlugin</span>({
<span class="hljs-attr">provider</span>: {
<span class="hljs-attr">id</span>: <span class="hljs-string">'2captcha'</span>,
<span class="hljs-attr">token</span>: <span class="hljs-string">'your-api-key'</span>
}
})
);
Si el complemento no logra resolver el CAPTCHA, puede cambiar a la rotación de proxy como alternativa:
<span class="hljs-keyword">try</span> {
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">solveRecaptchas</span>();
} <span class="hljs-keyword">catch</span> (e) {
<span class="hljs-comment">// Rotate to a new proxy if CAPTCHA solving fails</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setRequestInterception</span>(<span class="hljs-literal">true</span>);
<span class="hljs-keyword">await</span> <span class="hljs-title function_">useNextProxy</span>();
}
Estos métodos le ayudan a superar los desafíos de CAPTCHA y a mantener el acceso, incluso cuando las herramientas de automatización encuentran obstáculos.
Consejos y pautas de confiabilidad
La implementación de técnicas confiables es clave para garantizar el éxito en la automatización.
Configuración y uso del proxy
El uso de proxies bien administrados puede ayudar a reducir significativamente el riesgo de detección. Por ejemplo, los proxies residenciales premium ofrecen mejores capacidades de evasión. A continuación, se muestra un ejemplo de configuración:
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">args</span>: [
<span class="hljs-string">`--proxy-server=<span class="hljs-subst">${proxyAddress}</span>`</span>,
<span class="hljs-string">'--no-sandbox'</span>,
<span class="hljs-string">'--disable-setuid-sandbox'</span>
]
});
<span class="hljs-comment">// Handle proxy authentication</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setRequestInterception</span>(<span class="hljs-literal">true</span>);
page.<span class="hljs-title function_">on</span>(<span class="hljs-string">'request'</span>, <span class="hljs-function"><span class="hljs-params">request</span> =></span> {
request.<span class="hljs-title function_">continue</span>({
<span class="hljs-attr">headers</span>: {
...request.<span class="hljs-title function_">headers</span>(),
<span class="hljs-string">'Proxy-Authorization'</span>: <span class="hljs-string">`Basic <span class="hljs-subst">${Buffer.<span class="hljs-keyword">from</span>(
<span class="hljs-string">`<span class="hljs-subst">${proxyUsername}</span>:<span class="hljs-subst">${proxyPassword}</span>`</span>
).toString(<span class="hljs-string">'base64'</span>)}</span>`</span>
}
});
});
La rotación regular de servidores proxy también ayuda a mantener un acceso ininterrumpido:
<span class="hljs-keyword">const</span> proxyList = [
<span class="hljs-string">'proxy1.example.com:8080'</span>,
<span class="hljs-string">'proxy2.example.com:8080'</span>,
<span class="hljs-string">'proxy3.example.com:8080'</span>
];
<span class="hljs-keyword">function</span> <span class="hljs-title function_">getNextProxy</span>(<span class="hljs-params"></span>) {
<span class="hljs-keyword">const</span> proxy = proxyList.<span class="hljs-title function_">shift</span>();
proxyList.<span class="hljs-title function_">push</span>(proxy);
<span class="hljs-keyword">return</span> proxy;
}
Control de tiempo de solicitud
Simular un comportamiento similar al humano puede minimizar el riesgo de detección. Así es como puedes gestionar eficazmente la sincronización de las solicitudes:
<span class="hljs-keyword">const</span> <span class="hljs-title function_">simulateHumanBehavior</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-comment">// Add random mouse movements</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-property">mouse</span>.<span class="hljs-title function_">move</span>(<span class="hljs-number">100</span>, <span class="hljs-number">200</span>);
<span class="hljs-keyword">await</span> page.<span class="hljs-property">mouse</span>.<span class="hljs-title function_">move</span>(<span class="hljs-number">150</span>, <span class="hljs-number">250</span>, { <span class="hljs-attr">steps</span>: <span class="hljs-number">10</span> });
<span class="hljs-comment">// Randomize typing speed</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-property">keyboard</span>.<span class="hljs-title function_">type</span>(<span class="hljs-string">'Hello World'</span>, {
<span class="hljs-attr">delay</span>: <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * (<span class="hljs-number">150</span> - <span class="hljs-number">50</span>) + <span class="hljs-number">50</span>)
});
<span class="hljs-comment">// Add pauses</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForTimeout</span>(
<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * (<span class="hljs-number">3000</span> - <span class="hljs-number">1000</span>) + <span class="hljs-number">1000</span>)
);
};
Estas técnicas, combinadas con un manejo adecuado de las sesiones, hacen que los esfuerzos de automatización sean más confiables.
Gestión de cookies y sesiones
Gestionar las cookies eficazmente es crucial para mantener la continuidad de la sesión. A continuación, le indicamos cómo almacenar y restaurar sesiones:
<span class="hljs-comment">// Store successful session cookies</span>
<span class="hljs-keyword">const</span> <span class="hljs-title function_">storeCookies</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
<span class="hljs-keyword">await</span> fs.<span class="hljs-title function_">writeFile</span>(
<span class="hljs-string">'cookies.json'</span>,
<span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">stringify</span>(cookies, <span class="hljs-literal">null</span>, <span class="hljs-number">2</span>)
);
};
<span class="hljs-comment">// Restore previous session</span>
<span class="hljs-keyword">const</span> <span class="hljs-title function_">loadCookies</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-keyword">try</span> {
<span class="hljs-keyword">const</span> cookiesString = <span class="hljs-keyword">await</span> fs.<span class="hljs-title function_">readFile</span>(<span class="hljs-string">'cookies.json'</span>);
<span class="hljs-keyword">const</span> cookies = <span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">parse</span>(cookiesString);
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setCookie</span>(...cookies);
} <span class="hljs-keyword">catch</span> (error) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'No stored cookies found'</span>);
}
};
Si las cookies no pasan la validación, puedes actualizarlas automáticamente:
<span class="hljs-keyword">const</span> <span class="hljs-title function_">validateCookies</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">goto</span>(targetUrl);
<span class="hljs-keyword">if</span> (response.<span class="hljs-title function_">status</span>() === <span class="hljs-number">403</span>) {
<span class="hljs-keyword">await</span> <span class="hljs-title function_">clearCookies</span>(page);
<span class="hljs-keyword">await</span> <span class="hljs-title function_">initializeNewSession</span>(page);
}
};
Conclusión
Terminemos destacando las principales técnicas y pasos que hemos cubierto.
Resumen de técnicas clave
Para superar la protección de Cloudflare se requiere una combinación de métodos. Las estrategias más importantes incluyen:
- Uso de proxies residenciales con rotación adecuada
- Administrar huellas dactilares del navegador y agentes de usuario
- Manejo eficaz de cookies y sesiones
- Imitando el comportamiento humano con retrasos aleatorios
- Configuración de encabezados de solicitud precisos
- Gestionar correctamente la autenticación
Según datos de la industria, la combinación de estas técnicas puede generar tasas de éxito de hasta el 98.7 % cuando se optimizan las condiciones. [ 1 ].
Al centrarse en estos métodos centrales, puede crear un proceso de automatización confiable y compatible.
Pasos para la implementación
A continuación, se ofrecen algunos consejos finales para refinar su configuración de Puppeteer y sus esfuerzos para evitar Cloudflare:
- Comience con las configuraciones básicas de Puppeteer
- Rotar los proxies de forma inteligente
- Establecer mecanismos sólidos de gestión de errores
- Consulte los términos de servicio del sitio de destino antes de comenzar
- Mantenga las tasas de solicitud moderadas para evitar activar las defensas.
- Documente sus flujos de trabajo de automatización
Puppeteer requiere una configuración cuidadosa y ajustes regulares para mantener su eficacia frente a las cambiantes defensas de Cloudflare. A medida que las medidas de seguridad se vuelven más avanzadas, el éxito dependerá de las actualizaciones continuas de su estrategia y del estricto cumplimiento de las prácticas éticas. Si bien las configuraciones iniciales pueden funcionar bien, para mantener el rendimiento a largo plazo es necesario ser flexible y seguir directrices claras.
Artículos relacionados con
- Cómo funciona la detección de navegadores sin interfaz gráfica y cómo evitarla
- Configuración de proxy en Puppeteer: técnicas de autenticación, rotación y omisión
- Cómo gestionar la huella digital del navegador en Puppeteer para evitar la detección
- Superar CAPTCHA en scripts de Puppeteer: de reCAPTCHA a servicios de reconocimiento



