
Adélia Cruz
Neural Network Developer

¿Tus scripts de automatización en Node.js se bloquean constantemente por Cloudflare? No estás solo. Los poderosos mecanismos de seguridad de Cloudflare, como sus desafíos de JavaScript y el modo "I'm Under Attack", son efectivos para detener bots, pero también pueden detener tareas legítimas de raspado de web y extracción de datos. Estas verificaciones de seguridad validan a los visitantes ejecutando pruebas en segundo plano que a menudo fallan los scripts automatizados.
Este guía te mostrará cómo superar este obstáculo. Recorreremos un proceso claro y paso a paso utilizando Node.js y el servicio CapSolver para resolver eficientemente los desafíos de Cloudflare y obtener el token necesario cf_clearance para un acceso fluido.
Antes de comenzar, asegúrate de tener lo siguiente listo:
Primero, necesitamos instalar la biblioteca axios para realizar solicitudes HTTP. Abre tu terminal y ejecuta el siguiente comando:
npm install axios
Aquí tienes el código de ejemplo para resolver el desafío de Cloudflare y obtener el token cf_clearance utilizando Node.js y la API de CapSolver. Este código muestra cómo crear una AntiCloudflareTask y consultar el resultado.
Este código incorpora las últimas prácticas de la documentación oficial de CapSolver, con una estructura más limpia y comentarios necesarios.
const axios = require('axios');
// -------------------POR FAVOR MODIFICA ESTOS VALORES-------------------
// Tus detalles de proxy en el formato: http://usuario:contraseña@ip:púerto
const PROXY = 'http://usuario:contraseña@ip:púerto';
// Tu clave de API desde el Panel de CapSolver
const CAPSOLVER_API_KEY = 'TuAPIKEY';
// La URL del sitio web objetivo donde quieres resolver el desafío de Cloudflare
const PAGE_URL = 'https://www.tusitio.com';
// ----------------------------------------------------------------
/**
* Crea una tarea para resolver el desafío de Cloudflare usando la API de CapSolver.
* @param {string} websiteURL - La URL del sitio web objetivo.
* @param {string} proxy - El proxy a usar.
* @returns {Promise<string|null>} - El ID de la tarea, o null si falla la creación.
*/
async function createCloudflareTask(websiteURL, proxy) {
console.log('Creando tarea de Cloudflare para CapSolver...');
try {
const response = await axios.post('https://api.capsolver.com/createTask', {
clientKey: CAPSOLVER_API_KEY,
task: {
type: 'AntiCloudflareTask',
websiteURL: websiteURL,
proxy: proxy
}
});
if (response.data.errorId > 0) {
console.error(`Falló la creación de la tarea: ${response.data.errorDescription}`);
return null;
}
console.log(`Tarea creada correctamente. ID de tarea: ${response.data.taskId}`);
return response.data.taskId;
} catch (error) {
console.error(`Ocurrió un error al crear la tarea: ${error}`);
return null;
}
}
/**
* Consulta el resultado de la tarea.
* @param {string} taskId - El ID de la tarea devuelto por CapSolver.
* @returns {Promise<object|null>} - El objeto de solución, o null si falla.
*/
async function getTaskResult(taskId) {
console.log(`Obteniendo resultado para el ID de tarea ${taskId}...`);
let solution = null;
while (!solution) {
await new Promise(resolve => setTimeout(resolve, 3000)); // Esperar 3 segundos
try {
const response = await axios.post('https://api.capsolver.com/getTaskResult', {
clientKey: CAPSOLVER_API_KEY,
taskId: taskId
});
if (response.data.errorId > 0) {
console.error(`Falló obtener el resultado: ${response.data.errorDescription}`);
return null;
}
if (response.data.status === 'ready') {
console.log('Solución obtenida correctamente!');
solution = response.data.solution;
} else if (response.data.status === 'processing') {
console.log('La tarea aún está en proceso, por favor espere...');
} else if (response.data.status === 'failed') {
console.error(`Falló el procesamiento de la tarea: ${response.data.errorDescription}`);
return null;
}
} catch (error) {
console.error(`Ocurrió un error al obtener el resultado: ${error}`);
return null;
}
}
return solution;
}
/**
* Función principal para ejecutar todo el proceso.
*/
async function main() {
console.log('Iniciando para resolver el desafío de Cloudflare...');
const taskId = await createCloudflareTask(PAGE_URL, PROXY);
if (!taskId) {
console.log('No se pudo crear la tarea, saliendo.');
return;
}
const solution = await getTaskResult(taskId);
if (!solution) {
console.log('No se pudo recuperar la solución, saliendo.');
return;
}
console.log('Detalles de la solución obtenidos:');
console.log(solution);
// Ahora puedes usar las cookies y el user-agent obtenidos para acceder al sitio web objetivo.
// El objeto de solución contiene 'url', 'status', 'headers', 'cookies', 'userAgent'.
// Ejemplo: Cómo usar las cookies y el user-agent obtenidos para hacer una solicitud
try {
const cfCookie = solution.cookies.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');
console.log('\nAccediendo a la página objetivo con las cookies y el user-agent obtenidos...');
const pageResponse = await axios.get(PAGE_URL, {
headers: {
'User-Agent': solution.userAgent,
'Cookie': cfCookie
},
// Se recomienda usar una instancia de axios con proxy dedicado para solicitudes posteriores.
proxy: false,
});
console.log(`\nAcceso exitoso! Código de estado de la página: ${pageResponse.status}`);
// console.log('Contenido de la página:', pageResponse.data); // Descomentar para ver el contenido de la página
} catch (error) {
console.error(`\nError al acceder a la página con la solución: ${error.response ? error.response.status : error.message}`);
}
}
main();
Antes de ejecutar el código, asegúrate de modificar las siguientes variables:
PROXY: Reemplázalo con la dirección y credenciales de tu servidor proxy. El formato debe ser http://usuario:contraseña@ip:púerto.CAPSOLVER_API_KEY: Encuentra tu clave de API en el Panel de CapSolver y reemplaza el marcador de posición.PAGE_URL: Reemplázalo con la URL del sitio web objetivo protegido por Cloudflare.Al integrar CapSolver, los desarrolladores pueden automatizar el complejo proceso de manejar desafíos de Cloudflare dentro de sus aplicaciones en Node.js. Este enfoque no solo tiene una alta tasa de éxito, sino que también te libera de lidiar con políticas de seguridad en constante cambio. Simplemente llamas a una API y recibes el token cf_clearance y un User-Agent coincidente, permitiendo un acceso fluido a tu sitio web objetivo. Esta estrategia es esencial para cualquier proyecto que requiera recolección de datos estable y a gran escala. Para aquellos interesados en un enfoque más profundo, nuestro guía sobre cómo resolver el desafío de 5 segundos de Cloudflare proporciona detalles técnicos adicionales.
P1: ¿Por qué necesito usar un proxy?
R1: Cloudflare monitorea las direcciones IP en busca de actividad inusual. Una sola IP que realice muchas solicitudes puede ser marcada como bot. Usar proxies de alta calidad con rotación (como proxies residenciales o de ISP) imita el comportamiento de un usuario real y aumenta significativamente tu tasa de éxito.
P2: ¿Cuánto dura la validez del token cf_clearance?
R2: Un token cf_clearance suele ser válido durante unas horas, aunque la duración exacta depende de la configuración de Cloudflare del sitio web. Una vez que expire, debes ejecutar el proceso nuevamente para obtener un nuevo token.
P3: ¿Puedo usar la cookie obtenida en mi raspador?
R3: Sí. Después de obtener la solución de CapSolver, debes incluir la cookie cf_clearance y el User-Agent coincidente en todas las solicitudes HTTP posteriores. Es crucial usar la misma IP de proxy que se usó para generar el token. Aunque este guía se enfoca en Node.js, los mismos principios se aplican a otros lenguajes. Por ejemplo, puedes aprender cómo resolver Cloudflare con Python y Selenium en nuestro otro artículo.
P4: ¿Qué otros tipos de CAPTCHAS puede manejar CapSolver?
R4: CapSolver admite una amplia gama de desafíos más allá de Cloudflare, incluyendo diversas versiones de reCAPTCHA y CAPTCHAS basados en imágenes. Para mantenerte actualizado sobre las soluciones más efectivas, puedes consultar nuestras clasificaciones de mejores solucionadores de desafíos de Cloudflare. Para una lista completa de tipos compatibles, lo mejor es consultar la documentación oficial de CapSolver.
Aprende a solucionar el error de Cloudflare 1005 acceso denegado durante el scraping de web. Descubre soluciones como proxies residenciales, fingerprinting del navegador y CapSolver para CAPTCHA. Optimiza tu extracción de datos.

Descubre cómo manejar eficazmente Cloudflare Turnstile en flujos de trabajo de IA utilizando técnicas de stealth de Playwright y CapSolver para la resolución confiable de captchas. Aprende estrategias de integración prácticas y mejores prácticas para automatización ininterrumpida.
