Volver al blog

Métodos para eludir Turnstile y hCaptcha mediante proxies

Analizamos los mecanismos de funcionamiento de Turnstile y hCaptcha, examinamos los métodos de fingerprinting y compartimos formas comprobadas de eludir a través de proxies con ejemplos de código.

📅19 de diciembre de 2025
```html

Bypass Turnstile y hCaptcha: tecnologías de protección y métodos de solución

Cloudflare Turnstile y hCaptcha se han convertido en el estándar de protección de servicios web contra bots, reemplazando a la tradicional reCAPTCHA. Estos sistemas analizan decenas de parámetros del navegador y del entorno de red, lo que hace que el uso de proxies sea un desafío serio para la automatización. En este artículo, analizaremos cómo funcionan estas tecnologías a nivel técnico y qué métodos de bypass son realmente efectivos al trabajar a través de proxies.

Cómo funciona Cloudflare Turnstile

Cloudflare Turnstile es un sistema de protección de nueva generación que se posiciona como una "alternativa invisible a CAPTCHA". A diferencia de la clásica reCAPTCHA, Turnstile no requiere que el usuario seleccione semáforos o pasos de peatones. En su lugar, el sistema analiza las características de comportamiento y técnicas del navegador en segundo plano.

Técnicamente, Turnstile funciona en tres etapas. La primera es la carga de un widget de JavaScript, que se inyecta en la página a través de un iframe. La segunda es la recopilación de telemetría: el sistema recopila datos sobre el navegador, incluyendo el fingerprint de WebGL, el fingerprint de Canvas, la lista de fuentes, la resolución de pantalla, la zona horaria, el idioma del sistema y muchos otros parámetros. La tercera etapa es la validación en los servidores de Cloudflare, donde los datos recopilados se comparan con patrones conocidos de bots y proxies.

Una característica clave de Turnstile es el uso de un sistema de reputación de direcciones IP. Cloudflare tiene una enorme base de datos, recopilada de millones de sitios que utilizan su CDN y protección contra DDoS. Si se detecta que una dirección IP está involucrada en actividades sospechosas, la probabilidad de pasar Turnstile disminuye drásticamente. Esto crea el primer problema para los usuarios de proxies: incluso las IP residenciales limpias pueden tener una baja reputación debido a sus propietarios anteriores.

Importante: Turnstile tiene tres modos de operación: managed (automático), non-interactive (sin interacción) e invisible (completamente oculto). El modo determina la rigurosidad de la verificación y afecta los métodos de bypass.

Tecnología hCaptcha y métodos de detección

hCaptcha surgió como un competidor de Google reCAPTCHA con un enfoque en la privacidad y la monetización a través del aprendizaje automático. El sistema ofrece a los propietarios de sitios pagar por el uso de los datos de los usuarios para entrenar modelos de IA. Desde un punto de vista técnico, hCaptcha es más agresivo en la detección de automatización que Turnstile.

El mecanismo principal de funcionamiento de hCaptcha incluye varios niveles de protección. El primer nivel es la verificación de parámetros de red: el sistema analiza el TTL de los paquetes, las latencias en la red, la consistencia de la geolocalización de la dirección IP y la zona horaria declarada del navegador. El segundo nivel son las llamadas de JavaScript: hCaptcha verifica la presencia y el correcto funcionamiento de las API de Web, incluyendo WebRTC, Battery API, Sensor API. El tercer nivel es el análisis de comportamiento de los movimientos del ratón, la velocidad de desplazamiento y los patrones de clics.

Una característica de hCaptcha es el uso de verificaciones basadas en desafíos. Si el sistema sospecha de un bot, muestra tareas visuales: selección de imágenes con ciertos objetos, resolución de rompecabezas, reconocimiento de texto en imágenes distorsionadas. La dificultad de las tareas aumenta dinámicamente con cada intento fallido. Para los usuarios de proxies, esto significa que incluso con el fingerprint correcto, se puede obtener una cadena interminable de captchas.

Parámetro Turnstile hCaptcha
Modo de invisibilidad Sí, por defecto Opcional
Reputación de IP Crítica Importante
Fingerprinting Moderado Agresivo
Análisis de comportamiento Básico Avanzado
Frecuencia de captchas Baja Media-alta

Fingerprinting del navegador y proxies

El fingerprinting del navegador es una técnica de identificación del usuario a través de un conjunto único de características del navegador y del dispositivo. Incluso si utilizas un proxy para cambiar la dirección IP, el fingerprint permanece inalterado y puede revelar el uso de automatización. Los sistemas de protección modernos recopilan de 50 a más de 200 parámetros para crear un fingerprint.

Los componentes principales del fingerprint incluyen: fingerprint de Canvas (renderizado gráfico único, dependiente de la GPU y los controladores), fingerprint de WebGL (parámetros del acelerador gráfico), fingerprint de Audio Context (características del procesamiento de sonido), lista de fuentes instaladas, parámetros de pantalla (resolución, profundidad de color, relación de píxeles), User-Agent y encabezados del navegador, configuraciones de idioma, zona horaria, presencia de plugins y extensiones.

El problema para los usuarios de proxies radica en las incongruencias. Por ejemplo, si tu dirección IP muestra una ubicación en Alemania, pero la zona horaria del navegador está configurada en Moscú, eso es una bandera roja. Si una fuga de WebRTC revela tu verdadera dirección IP, que es diferente de la del proxy, el sistema identifica instantáneamente el engaño. Si el User-Agent declara Windows, pero el fingerprint de Canvas corresponde a Linux, la detección está garantizada.

// Ejemplo de recolección de un fingerprint básico
const fingerprint = {
  canvas: getCanvasFingerprint(),
  webgl: getWebGLFingerprint(),
  fonts: getFonts(),
  screen: {
    width: screen.width,
    height: screen.height,
    colorDepth: screen.colorDepth,
    pixelRatio: window.devicePixelRatio
  },
  timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
  language: navigator.language,
  platform: navigator.platform,
  hardwareConcurrency: navigator.hardwareConcurrency,
  deviceMemory: navigator.deviceMemory,
  webrtc: await getWebRTCIPs()
};

function getCanvasFingerprint() {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  ctx.textBaseline = 'top';
  ctx.font = '14px Arial';
  ctx.fillText('Fingerprint del navegador', 2, 2);
  return canvas.toDataURL();
}

Métodos de detección de proxies

Los sistemas de protección utilizan múltiples técnicas para detectar proxies. El primer método es la verificación a través de bases de datos de proxies y VPN conocidos. Servicios como IPHub, IP2Proxy, MaxMind GeoIP2 contienen millones de direcciones IP clasificadas como proxies, VPN, proveedores de hosting. Cloudflare y hCaptcha están integrados con estas bases y aumentan automáticamente el nivel de verificación para IP sospechosas.

El segundo método es el análisis de ASN (Número de Sistema Autónomo). Los proxies de centros de datos suelen pertenecer a proveedores de hosting (AWS, DigitalOcean, OVH), lo que se puede determinar fácilmente por el ASN. Los proxies residenciales utilizan ASN de proveedores de internet comunes (Comcast, Verizon, Deutsche Telekom), lo que los hace menos sospechosos. Sin embargo, incluso las redes residenciales pueden estar parcialmente comprometidas si el proveedor es conocido por vender proxies.

El tercer método es el análisis de comportamiento a nivel de red. Los sistemas rastrean anomalías: TTL de paquetes demasiado bajo o alto, latencias inusuales, uso de puertos no estándar, incongruencias en la geolocalización y el camino de enrutamiento. Por ejemplo, si una dirección IP se geolocaliza en EE. UU., pero un traceroute muestra una ruta a través de servidores europeos, eso es un signo de proxy.

Error común: Usar una sola dirección IP para múltiples sesiones con diferentes fingerprints. Los sistemas rastrean tales patrones y bloquean la IP por completo, incluso si se trata de un proxy residencial de calidad.

Proxies residenciales como solución básica

Los proxies residenciales son la base para el bypass de Turnstile y hCaptcha. A diferencia de los proxies de centros de datos, los residenciales utilizan direcciones IP de dispositivos reales: routers domésticos, teléfonos móviles, dispositivos IoT. Esto los hace prácticamente indistinguibles de los usuarios normales desde el punto de vista de la infraestructura de red.

Las principales ventajas de los proxies residenciales para el bypass de captchas son: pertenencia a ISP (Proveedor de Servicios de Internet), en lugar de a proveedores de hosting; reputación limpia de las direcciones IP en la mayoría de los casos; geolocalización y enrutamiento correctos; baja probabilidad de ser incluidos en listas negras. Sin embargo, no todos los proxies residenciales son igualmente efectivos. Varios factores son críticos.

El primer factor es la rotación de direcciones IP. Los proxies residenciales estáticos (sticky sessions) permiten usar una IP durante varios minutos a varias horas. Esto es óptimo para escenarios donde se requiere mantener una sesión: autorización, llenado de formularios, operaciones de múltiples pasos. Los proxies rotativos cambian la IP en cada solicitud o por temporizador, lo que es útil para scraping, pero puede causar problemas con captchas debido al cambio frecuente de contexto.

El segundo factor es la distribución geográfica. Para el bypass de captchas, es importante que la geolocalización de la IP coincida con la segmentación del sitio y la configuración del navegador. Si trabajas con un sitio alemán, utiliza proxies residenciales alemanes y establece la zona horaria correspondiente (Europe/Berlin), el idioma (de-DE) y la localidad en el navegador.

El tercer factor es la calidad del proveedor de proxies. Los proxies residenciales baratos a menudo se recopilan a través de métodos dudosos (aplicaciones VPN gratuitas, dispositivos infectados), lo que lleva a una baja reputación del pool de IP. Los proveedores profesionales trabajan con asociaciones de SDK legítimas y monitorean cuidadosamente la calidad de la red. Verifica la tasa de éxito del proveedor en los sitios objetivo antes de escalar.

Herramientas de automatización: Selenium, Puppeteer, Playwright

La elección de la herramienta de automatización afecta críticamente la capacidad de eludir captchas. Selenium, Puppeteer y Playwright son las tres soluciones principales, cada una con sus propias características de detección. Los sistemas de protección pueden identificar el uso de estas herramientas a través de decenas de señales.

Selenium es la herramienta más antigua y la más fácil de detectar. Un navegador controlado por Selenium tiene marcadores evidentes: la variable window.navigator.webdriver está establecida en true, faltan algunas propiedades del objeto navigator, y las dimensiones de la ventana del navegador son características de la automatización. Incluso con proxies, Selenium a menudo falla en las verificaciones de Turnstile y hCaptcha sin ofuscación adicional.

Puppeteer y Playwright son herramientas más modernas basadas en el Protocolo de Herramientas de Desarrollo de Chrome. También son detectables, pero tienen menos señales evidentes. Los métodos principales de detección incluyen: verificación de chrome.runtime, análisis de la API de permisos, detección del modo headless a través de la ausencia de plugins y dimensiones específicas del viewport, verificación de la presencia de DevTools a través de ataques de temporización.

// Configuración básica de Puppeteer con proxy y anti-detección
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

puppeteer.use(StealthPlugin());

const browser = await puppeteer.launch({
  headless: false, // headless: true es fácilmente detectable
  args: [
    '--proxy-server=http://your-proxy:port',
    '--disable-blink-features=AutomationControlled',
    '--disable-dev-shm-usage',
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-web-security',
    '--disable-features=IsolateOrigins,site-per-process',
    `--window-size=1920,1080`,
    '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  ]
});

const page = await browser.newPage();

// Autenticación del proxy
await page.authenticate({
  username: 'proxy_user',
  password: 'proxy_pass'
});

// Sobrescribir la propiedad webdriver
await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, 'webdriver', {
    get: () => false
  });
  
  // Emulación de plugins para headless
  Object.defineProperty(navigator, 'plugins', {
    get: () => [1, 2, 3, 4, 5]
  });
});

Para un bypass serio de captchas, se recomienda utilizar navegadores anti-detección especializados: Multilogin, GoLogin, AdsPower, Dolphin Anty. Estas soluciones crean perfiles de navegador aislados con fingerprints únicos, gestionan cookies y almacenamiento de sesión, sincronizan automáticamente la zona horaria con la geolocalización del proxy, y emulan fingerprints de Canvas y WebGL realistas.

Servicios de resolución de captcha: integración y efectividad

Cuando los métodos técnicos no son suficientes, los servicios de resolución de captcha entran en juego. Se dividen en dos tipos: humanos (crowdsourcing) y automáticos (aprendizaje automático). Para Turnstile y hCaptcha, la efectividad varía.

Los servicios humanos (2Captcha, AntiCaptcha, CapSolver, CapMonster Cloud) funcionan bajo el principio del trabajo distribuido: tu captcha se envía a una persona real que la resuelve manualmente. Ventajas: alta tasa de éxito (95-99% para hCaptcha, 85-95% para Turnstile), soporte para tareas visuales complejas, estabilidad relativa. Desventajas: velocidad de resolución de 10-60 segundos, costo de $1-3 por 1000 captchas, dependencia de la disponibilidad de operadores.

Los servicios automáticos utilizan modelos de IA para el reconocimiento. Son más rápidos (1-5 segundos) y más baratos, pero tienen una tasa de éxito más baja para captchas modernas — generalmente 60-80% para hCaptcha y 50-70% para Turnstile. Son efectivos para tareas simples basadas en desafíos, pero a menudo fallan en verificaciones invisibles.

// Integración de 2Captcha para resolver hCaptcha
const axios = require('axios');

async function solveHCaptcha(sitekey, pageUrl, proxyConfig) {
  const API_KEY = 'your_2captcha_api_key';
  
  // Envío de tarea
  const createTask = await axios.post('https://2captcha.com/in.php', null, {
    params: {
      key: API_KEY,
      method: 'hcaptcha',
      sitekey: sitekey,
      pageurl: pageUrl,
      proxy: `${proxyConfig.type}:${proxyConfig.host}:${proxyConfig.port}:${proxyConfig.user}:${proxyConfig.pass}`,
      json: 1
    }
  });
  
  const taskId = createTask.data.request;
  
  // Esperando la resolución
  let solution = null;
  for (let i = 0; i < 60; i++) {
    await new Promise(resolve => setTimeout(resolve, 3000));
    
    const result = await axios.get('https://2captcha.com/res.php', {
      params: {
        key: API_KEY,
        action: 'get',
        id: taskId,
        json: 1
      }
    });
    
    if (result.data.status === 1) {
      solution = result.data.request;
      break;
    }
  }
  
  return solution; // token para insertar en el formulario
}

// Uso en Puppeteer
const captchaToken = await solveHCaptcha(
  'site-key-from-page',
  'https://example.com',
  { type: 'http', host: 'proxy.example.com', port: 8080, user: 'user', pass: 'pass' }
);

await page.evaluate((token) => {
  document.querySelector('[name="h-captcha-response"]').value = token;
  document.querySelector('[name="g-recaptcha-response"]').value = token;
}, captchaToken);

Es crucial pasar los parámetros correctos del proxy al servicio de resolución de captcha. Si el captcha se resuelve desde una IP y luego el token se utiliza desde otra, la validación fallará. Los captchas modernos vinculan el token a la dirección IP, User-Agent y otros parámetros de sesión.

Técnicas avanzadas: emulación de dispositivos y fingerprinting TLS

Para el bypass de sistemas más protegidos, se requieren técnicas avanzadas que van más allá de la configuración básica de proxies y navegadores. Dos áreas clave son la emulación de dispositivos móviles y la gestión del fingerprinting TLS.

Los proxies móviles combinados con la emulación de navegadores móviles ofrecen una alta efectividad contra captchas. Razones: el tráfico móvil tiene un mayor puntaje de confianza, las direcciones IP móviles (especialmente 4G/5G) son a menudo dinámicas y cambian de forma natural, los dispositivos móviles tienen un conjunto diferente de parámetros de fingerprint, muchos sitios simplifican las verificaciones para usuarios móviles.

Para una correcta emulación de un dispositivo móvil, es necesario: usar un User-Agent móvil (coincidencia exacta con el modelo del dispositivo), establecer el viewport y devicePixelRatio correctos, emular eventos táctiles en lugar de eventos de ratón, utilizar valores móviles para navigator.platform y navigator.maxTouchPoints, y ajustar el fingerprint de WebGL y Canvas para un modelo específico de dispositivo.

// Emulación de iPhone 13 Pro en Playwright
const { chromium, devices } = require('playwright');

const iPhone13Pro = devices['iPhone 13 Pro'];

const browser = await chromium.launch({
  proxy: {
    server: 'http://mobile-proxy:port',
    username: 'user',
    password: 'pass'
  }
});

const context = await browser.newContext({
  ...iPhone13Pro,
  locale: 'en-US',
  timezoneId: 'America/New_York',
  geolocation: { latitude: 40.7128, longitude: -74.0060 },
  permissions: ['geolocation']
});

const page = await context.newPage();

// Configuración adicional del fingerprint
await page.addInitScript(() => {
  Object.defineProperty(navigator, 'hardwareConcurrency', {
    get: () => 6 // iPhone 13 Pro tiene 6 núcleos
  });
  
  Object.defineProperty(navigator, 'deviceMemory', {
    get: () => 6 // 6GB RAM
  });
});

El fingerprinting TLS es un método de identificación del cliente a través de los parámetros de la conexión TLS/SSL. Cada navegador y sistema operativo tiene una combinación única de suites de cifrado, extensiones, curvas elípticas, que se transmiten al establecer una conexión HTTPS. Los sistemas de protección analizan el fingerprint TLS y lo comparan con el User-Agent declarado.

El problema de las herramientas de automatización estándar es que utilizan el fingerprint TLS de Chromium básico, que difiere del Chrome completo. Esta incongruencia es detectable. Soluciones: uso de bibliotecas como curl-impersonate o tls-client para Python, que emulan el fingerprint TLS de navegadores específicos; aplicación de clientes HTTP con personalización de TLS (por ejemplo, cycletls para Node.js); uso de navegadores completos en lugar de modos headless.

Enfoque combinado:

  • Proxies residenciales o móviles para una IP limpia
  • Navegador anti-detección o Playwright bien configurado para un fingerprint correcto
  • Sincronización de todos los parámetros: geolocalización IP = zona horaria = idioma = localidad
  • Emulación del comportamiento humano: retrasos, movimientos del ratón, desplazamiento
  • Servicio de resolución de captcha como fallback para casos complejos

Ejemplos prácticos de código

Consideremos un ejemplo completo de bypass de Turnstile utilizando Playwright, proxies residenciales y técnicas anti-detección. Este código demuestra un enfoque integral para resolver el problema.

const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();

// Configuración del proxy
const proxyConfig = {
  server: 'http://residential-proxy.proxycove.com:8080',
  username: 'your_username',
  password: 'your_password'
};

// Configuraciones para simular un usuario real de Alemania
const userConfig = {
  viewport: { width: 1920, height: 1080 },
  userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
  locale: 'de-DE',
  timezoneId: 'Europe/Berlin',
  geolocation: { latitude: 52.5200, longitude: 13.4050 }, // Berlín
  permissions: ['geolocation']
};

async function bypassTurnstile(url) {
  const browser = await chromium.launch({
    headless: false, // importante para captchas complejos
    proxy: proxyConfig,
    args: [
      '--disable-blink-features=AutomationControlled',
      '--no-sandbox',
      '--disable-dev-shm-usage'
    ]
  });

  const context = await browser.newContext({
    ...userConfig,
    // Encabezados adicionales
    extraHTTPHeaders: {
      'Accept-Language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7',
      'Accept-Encoding': 'gzip, deflate, br',
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
      'DNT': '1',
      'Connection': 'keep-alive',
      'Upgrade-Insecure-Requests': '1'
    }
  });

  const page = await context.newPage();

  // Inyección de scripts anti-detección
  await page.addInitScript(() => {
    // Ocultar webdriver
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    });

    // Emulación de chrome runtime
    window.chrome = {
      runtime: {}
    };

    // Sobrescribir permisos
    const originalQuery = window.navigator.permissions.query;
    window.navigator.permissions.query = (parameters) => (
      parameters.name === 'notifications' ?
        Promise.resolve({ state: Notification.permission }) :
        originalQuery(parameters)
    );

    // Valores más realistas para Windows
    Object.defineProperty(navigator, 'platform', {
      get: () => 'Win32'
    });

    Object.defineProperty(navigator, 'hardwareConcurrency', {
      get: () => 8
    });

    Object.defineProperty(navigator, 'deviceMemory', {
      get: () => 8
    });
  });

  // Emulación del comportamiento humano
  async function humanLikeDelay(min = 1000, max = 3000) {
    const delay = Math.random() * (max - min) + min;
    await page.waitForTimeout(delay);
  }

  async function humanLikeMouseMove() {
    const viewportSize = page.viewportSize();
    const x = Math.random() * viewportSize.width;
    const y = Math.random() * viewportSize.height;
    await page.mouse.move(x, y, { steps: 10 });
  }

  try {
    // Navegar a la página
    await page.goto(url, { waitUntil: 'networkidle' });
    
    await humanLikeDelay(2000, 4000);
    await humanLikeMouseMove();

    // Esperar a que se cargue Turnstile
    await page.waitForSelector('iframe[src*="turnstile"]', { timeout: 10000 });
    
    console.log('Turnstile detectado, esperando solución automática...');
    
    // Turnstile en modo managed a menudo se resuelve automáticamente
    // Esperando la aparición del token
    await page.waitForFunction(() => {
      const response = document.querySelector('[name="cf-turnstile-response"]');
      return response && response.value.length > 0;
    }, { timeout: 30000 });

    console.log('Turnstile pasado con éxito!');
    
    // Acciones adicionales en el sitio
    await humanLikeDelay();
    
    // Ejemplo: llenado de formulario
    await page.fill('#email', 'user@example.com');
    await humanLikeDelay(500, 1500);
    
    await page.fill('#password', 'SecurePassword123');
    await humanLikeDelay(500, 1500);
    
    await humanLikeMouseMove();
    await page.click('button[type="submit"]');
    
    await page.waitForNavigation({ waitUntil: 'networkidle' });
    
    console.log('Autenticación completada');

  } catch (error) {
    console.error('Error al eludir Turnstile:', error.message);
    
    // Captura de pantalla para depuración
    await page.screenshot({ path: 'turnstile_error.png', fullPage: true });
    
  } finally {
    await browser.close();
  }
}

// Ejecución
bypassTurnstile('https://example.com/login');

Para hCaptcha con tareas visuales, se requerirá la integración de un servicio de resolución. Aquí hay un ejemplo utilizando 2Captcha:

const axios = require('axios');

class HCaptchaSolver {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = 'https://2captcha.com';
  }

  async solve(sitekey, pageUrl, proxy = null) {
    // Creación de tarea
    const params = {
      key: this.apiKey,
      method: 'hcaptcha',
      sitekey: sitekey,
      pageurl: pageUrl,
      json: 1
    };

    if (proxy) {
      params.proxy = `${proxy.type}:${proxy.host}:${proxy.port}:${proxy.username}:${proxy.password}`;
      params.proxytype = proxy.type.toUpperCase();
    }

    const createResponse = await axios.post(`${this.baseUrl}/in.php`, null, { params });
    
    if (createResponse.data.status !== 1) {
      throw new Error(`Error al crear tarea: ${createResponse.data.request}`);
    }

    const taskId = createResponse.data.request;
    console.log(`Tarea creada: ${taskId}`);

    // Polling del resultado
    for (let attempt = 0; attempt < 60; attempt++) {
      await new Promise(resolve => setTimeout(resolve, 5000));

      const resultResponse = await axios.get(`${this.baseUrl}/res.php`, {
        params: {
          key: this.apiKey,
          action: 'get',
          id: taskId,
          json: 1
        }
      });

      if (resultResponse.data.status === 1) {
        console.log('hCaptcha resuelta!');
        return resultResponse.data.request;
      }

      if (resultResponse.data.request !== 'CAPCHA_NOT_READY') {
        throw new Error(`Error en la resolución: ${resultResponse.data.request}`);
      }

      console.log(`Intento ${attempt + 1}/60: captcha aún se está resolviendo...`);
    }

    throw new Error('Timeout: captcha no resuelta en 5 minutos');
  }
}

// Uso con Playwright
async function bypassHCaptcha(page, proxyConfig) {
  // Obtener sitekey de la página
  const sitekey = await page.getAttribute('[data-sitekey]', 'data-sitekey');
  const pageUrl = page.url();

  const solver = new HCaptchaSolver('your_2captcha_api_key');
  
  const token = await solver.solve(sitekey, pageUrl, {
    type: 'http',
    host: 'residential-proxy.proxycove.com',
    port: 8080,
    username: 'your_username',
    password: 'your_password'
  });

  // Inyección del token en la página
  await page.evaluate((captchaToken) => {
    document.querySelector('[name="h-captcha-response"]').value = captchaToken;
    
    // Para algunos sitios, también se requiere g-recaptcha-response
    const gRecaptcha = document.querySelector('[name="g-recaptcha-response"]');
    if (gRecaptcha) {
      gRecaptcha.value = captchaToken;
    }
    
    // Disparar evento para callback
    const event = new Event('change', { bubbles: true });
    document.querySelector('[name="h-captcha-response"]').dispatchEvent(event);
  }, token);

  console.log('Token de hCaptcha inyectado');
}

Conclusión

El bypass de Turnstile y hCaptcha a través de proxies es una tarea compleja que requiere comprensión de los mecanismos de protección y una combinación adecuada de tecnologías. Conclusiones clave: utiliza proxies residenciales o móviles de calidad en lugar de proxies de centros de datos; sincroniza todos los parámetros del entorno (geolocalización IP, zona horaria, idioma, localidad); aplica técnicas anti-detección para ocultar la automatización; emula un comportamiento humano realista; utiliza servicios de resolución de captcha como un nivel adicional de protección.

La efectividad de los métodos depende del sitio específico y de la configuración de protección. Se recomienda comenzar con una configuración básica y complicarla gradualmente, monitoreando la tasa de éxito. Prueba en volúmenes pequeños antes de escalar para evitar el bloqueo del pool de IP. Actualiza regularmente los parámetros de fingerprint y el User-Agent para las versiones actuales de los navegadores.

Para un trabajo profesional con captchas, considera utilizar plataformas de automatización especializadas que integren proxies, navegadores anti-detección y servicios de resolución en un ecosistema único. Esto reduce la complejidad de la integración y aumenta la estabilidad de los resultados. Comienza con la prueba de proxies de calidad en tus sitios objetivo — esta es la base para un exitoso bypass de los sistemas de protección modernos.

```