Reference

Evaluación comparativa de CAPTCHA para resolver tiempos entre tipos con CaptchaAI

Resuelve cuestiones de tiempo. Una diferencia de 10 segundos por resolución se traduce en horas de retraso en miles de tareas. Esta guía proporciona puntos de referencia reproducibles para cada tipo de CAPTCHA.CaptchaAIadmite, además de scripts para ejecutar sus propias mediciones.

Tiempos de resolución típicos

Estos puntos de referencia reflejan los tiempos medios de 100 soluciones consecutivas por tipo, medidos desde el envío de API hasta la recuperación de resultados:

Tipo CAPTCHA Resolución mediana P90 P99 Tasa de éxito
reCAPTCHA v2 12–18s* 25s* 40s* medir
reCAPTCHA v2 Invisible 10–15s* 20s* 35s* medir
reCAPTCHA v3 8–12s 18s 30s 90%+
reCAPTCHA Enterprise 15–25s 35s 50s 90%+
Cloudflare Turnstile 5–10s 15s 25s 99%+
GeeTest v3 10–18s 25s 40s 90%+
Imagen/OCR 3–8s 12s 20s 85%+
BLS CAPTCHA 5–10s 15s 20s 100%

Los tiempos varían según la calidad del proxy, la carga del servidor y la complejidad del CAPTCHA.

Factores que afectan el tiempo de resolución

Latencia de red

Su distancia de los puntos finales API de CaptchaAI agrega tiempo de ida y vuelta. Un RTT de 200 ms agrega aproximadamente 1 segundo en total (enviar + 3 a 4 consultas × 200 ms).

Calidad del proxy

Cuando se utilizan proxies, los proxies residenciales suelen producir soluciones más rápidas que los proxies de centros de datos porque desencadenan menos desafíos secundarios.

Complejidad CAPTCHA

Los desafíos de imágenes reCAPTCHA v2 varían en dificultad. Un desafío de "semáforo seleccionado" con imágenes descoloridas lleva más tiempo que una simple verificación de casilla de verificación.

Estrategia de consulta

El polling agresivo (cada 2 segundos) puede detectar resultados antes, pero aumenta las llamadas a la API. El polling conservador (cada 10 segundos) reduce la carga pero agrega latencia.

Secuencia de comandos de referencia de Python

# benchmark_captchaai.py
import os
import time
import statistics
import requests

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")

def benchmark_solve(method, params, runs=10):
    """Benchmark a CAPTCHA type over multiple runs."""
    times = []
    successes = 0

    for i in range(runs):
        start = time.time()

        # Submit
        submit_params = {"key": API_KEY, "json": "1", **params}
        resp = requests.get("https://ocr.captchaai.com/in.php",
                            params=submit_params)
        result = resp.json()

        if result.get("status") != 1:
            print(f"  Run {i+1}: Submit failed - {result.get('request')}")
            continue

        task_id = result["request"]

        # Poll
        time.sleep(10)
        solved = False
        for _ in range(30):
            poll = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": API_KEY, "action": "get",
                "id": task_id, "json": "1",
            })
            poll_result = poll.json()

            if poll_result.get("status") == 1:
                elapsed = time.time() - start
                times.append(elapsed)
                successes += 1
                solved = True
                print(f"  Run {i+1}: {elapsed:.1f}s")
                break
            if poll_result.get("request") != "CAPCHA_NOT_READY":
                print(f"  Run {i+1}: Error - {poll_result.get('request')}")
                break

            time.sleep(5)

        if not solved and poll_result.get("request") == "CAPCHA_NOT_READY":
            print(f"  Run {i+1}: Timeout")

    if times:
        return {
            "runs": runs,
            "successes": successes,
            "success_rate": f"{successes/runs*100:.0f}%",
            "median": f"{statistics.median(times):.1f}s",
            "p90": f"{sorted(times)[int(len(times)*0.9)]:.1f}s" if len(times) >= 10 else "N/A",
            "min": f"{min(times):.1f}s",
            "max": f"{max(times):.1f}s",
        }
    return {"error": "No successful solves"}

# Benchmark reCAPTCHA v2
print("=== reCAPTCHA v2 ===")
recaptcha_v2 = benchmark_solve("userrecaptcha", {
    "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "pageurl": "https://www.google.com/recaptcha/api2/demo",
})
print(recaptcha_v2)

# Benchmark Image/OCR
print("\n=== Image CAPTCHA ===")
# Submit a base64-encoded test image
import base64
# Use a test image for benchmarking
image_result = benchmark_solve("post", {
    "method": "base64",
    "body": "BASE64_ENCODED_CAPTCHA_IMAGE",
})
print(image_result)

Secuencia de comandos de referencia de JavaScript

// benchmark_captchaai.js
const axios = require('axios');

const API_KEY = process.env.CAPTCHAAI_KEY || 'YOUR_API_KEY';

async function benchmarkSolve(params, runs = 10) {
  const times = [];
  let successes = 0;

  for (let i = 0; i < runs; i++) {
    const start = Date.now();

    // Submit
    const submit = await axios.get('https://ocr.captchaai.com/in.php', {
      params: { key: API_KEY, json: '1', ...params },
    });

    if (submit.data.status !== 1) {
      console.log(`  Run ${i + 1}: Submit failed - ${submit.data.request}`);
      continue;
    }

    // Poll
    await new Promise(r => setTimeout(r, 10000));
    let solved = false;

    for (let j = 0; j < 30; j++) {
      const poll = await axios.get('https://ocr.captchaai.com/res.php', {
        params: { key: API_KEY, action: 'get', id: submit.data.request, json: '1' },
      });

      if (poll.data.status === 1) {
        const elapsed = (Date.now() - start) / 1000;
        times.push(elapsed);
        successes++;
        solved = true;
        console.log(`  Run ${i + 1}: ${elapsed.toFixed(1)}s`);
        break;
      }
      if (poll.data.request !== 'CAPCHA_NOT_READY') {
        console.log(`  Run ${i + 1}: Error - ${poll.data.request}`);
        break;
      }
      await new Promise(r => setTimeout(r, 5000));
    }

    if (!solved) console.log(`  Run ${i + 1}: Timeout`);
  }

  if (times.length === 0) return { error: 'No successful solves' };

  times.sort((a, b) => a - b);
  return {
    runs, successes,
    successRate: `${((successes / runs) * 100).toFixed(0)}%`,
    median: `${times[Math.floor(times.length / 2)].toFixed(1)}s`,
    min: `${times[0].toFixed(1)}s`,
    max: `${times[times.length - 1].toFixed(1)}s`,
  };
}

(async () => {
  console.log('=== reCAPTCHA v2 ===');
  const v2 = await benchmarkSolve({
    method: 'userrecaptcha',
    googlekey: '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
    pageurl: 'https://www.google.com/recaptcha/api2/demo',
  });
  console.log(v2);

  console.log('\n=== Cloudflare Turnstile ===');
  const turnstile = await benchmarkSolve({
    method: 'turnstile',
    sitekey: 'YOUR_TURNSTILE_SITEKEY',
    pageurl: 'https://example.com',
  });
  console.log(turnstile);
})();

Interpretación de resultados

Mediana frente a P90

  • Mediana: la experiencia típica. Utilice esto para la planificación de capacidad.
  • P90 — El "peor caso" para 9 de cada 10 soluciones. Utilice esto para configurar el tiempo de espera.
  • P99 — El verdadero caso límite. Establezca su tiempo de espera máximo más alto que esto.

Intervalos de sondeo óptimos

Según los puntos de referencia anteriores, configure el sondeo por tipo de CAPTCHA:

Tipo CAPTCHA Espera inicial Intervalo de sondeo Intentos máximos
Imagen/OCR 5s 3s 15
Cloudflare Turnstile 5s 3s 15
BLS CAPTCHA 5s 3s 15
reCAPTCHA v2 15 5s 20
reCAPTCHA v3 10 5s 20
GeeTest v3 12s 5s 20
Empresa reCAPTCHA 15 5s 25

Solución de problemas

Problema Causa Solución
Resolver tiempos superiores a los indicados Latencia de red o problemas de proxy Prueba desde una región más cercana a los servidores CaptchaAI
Resultados inconsistentes entre ejecuciones. Variación de dificultad CAPTCHA Aumente el tamaño de la muestra a más de 50 ejecuciones
Muchos tiempos de espera Clave de sitio o URL de página no válida Verifique los parámetros con una sola prueba manual
ERROR_ZERO_BALANCE durante el punto de referencia Saldo insuficiente para todas las carreras. Recargue antes de ejecutar pruebas comparativas importantes

Preguntas frecuentes

¿Los tiempos de resolución varían según la hora del día?

Sí. Las horas pico (horario comercial de EE. UU.) pueden mostrar tiempos de resolución ligeramente más largos debido a una mayor demanda. Ejecute puntos de referencia en diferentes momentos para obtener una imagen completa.

¿Debo utilizar estos datos para configurar el tiempo de espera de producción?

Utilice los valores P90 para tiempos de espera estándar y P99 para tiempos de espera máximos. Agregue un búfer del 20 % para tener en cuenta la variabilidad de la red.

¿Cómo afecta la configuración del proxy a los tiempos de resolución?

Si proporciona un proxy, CaptchaAI dirige la resolución a través de él. Los proxies lentos o distantes pueden agregar entre 5 y 15 segundos al tiempo total de resolución. Para realizar evaluaciones comparativas, pruebe con y sin proxies por separado.

Artículos relacionados

Ejecuta los scripts de benchmark con tu propia cuenta y objetivos CAPTCHA. Obtén tu API key de CaptchaAI.

Los comentarios están deshabilitados para este artículo.

Publicaciones relacionadas

Explainers Impacto de la resolución DNS en el rendimiento de la API CAPTCHA
Cómo afecta la resolución DNS al rendimiento de la API CAPTCHA: cuándo es un cuello de botella, cómo optimizarla con keep-alive, caché y pre-resolución.

Cómo afecta la resolución DNS al rendimiento de la API CAPTCHA: cuándo es un cuello de botella, cómo optimizar...

Apr 24, 2026
DevOps & Scaling Trabajadores de resolución de CAPTCHA de escala automática
Cómo implementar autoescalado de trabajadores que resuelven CAPTCHA con Captcha AI: escalado basado en cola, subprocesos vs.

Cómo implementar autoescalado de trabajadores que resuelven CAPTCHA con Captcha AI: escalado basado en cola, s...

May 01, 2026
Explainers Gestión de user-agent en QA propia con CaptchaAI
Cómo gestionar el user-agent en pruebas QA propias para reproducir escenarios reales sin recurrir a anti-detección.

Cómo gestionar el user-agent en pruebas QA propias para reproducir escenarios reales sin recurrir a anti-detec...

May 01, 2026