Reference

Analyse comparative des temps de résolution de CAPTCHA pour tous les types avec CaptchaAI

Dix secondes de délai supplémentaire par résolution se traduit par des heures de retard sur des milliers de tâches. Ce guide fournit des références reproductibles pour chaque type de CAPTCHA pris en charge par CaptchaAI, ainsi que des scripts pour exécuter vos propres mesures.

Temps de résolution typiques

Ces benchmarks reflètent les temps médians de 100 résolutions consécutives par type, mesurés depuis la soumission de l'API jusqu'à la récupération des résultats :

Type de CAPTCHA Résolution médiane P90 Résoudre P99 Résoudre Taux de réussite
reCAPTCHA v2 12–18 s 25 s ~40 s 95 %+
reCAPTCHA v2 Invisible 10–15 s 20 s 35 s 95 %+
reCAPTCHA v3 8–12 s 18 s ~30 s 90 %+
reCAPTCHA Entreprise 15–25 s 35 s ~50 s 90 %+
Cloudflare Turnstile 5–10 s 15 s 25 s 99 %+
GeeTest v3 <12s <12s <12s 90 %+
Image/OCR 3–8 s 12 s 20 s 85 %+
BLS CAPTCHA 5–10 s 15 s 20 s 100 %

Les délais varient en fonction de la qualité du proxy, de la charge du serveur et de la complexité du CAPTCHA.

Facteurs affectant le temps de résolution

Latence du réseau

Votre distance par rapport aux points de terminaison de l'API de CaptchaAI ajoute du temps aller-retour. Un RTT de 200 ms ajoute environ 1 seconde au total (soumission + 3 à 4 sondages × 200 ms).

Qualité du proxy

Lors de l'utilisation de proxys, les proxys résidentiels produisent généralement des résolutions plus rapides que les proxys de centre de données, car ils déclenchent moins de défis secondaires.

Complexité du CAPTCHA

Les défis d'image reCAPTCHA v2 varient en difficulté. Un défi « sélectionner des feux de circulation » avec des images qui s'estompent prend plus de temps qu'une simple vérification d'une case à cocher.

Stratégie de sondage

Une interrogation agressive (toutes les 2 secondes) détecte les résultats plus rapidement mais augmente les appels d'API. Une interrogation conservatrice (toutes les 10 secondes) réduit la charge mais ajoute de la latence.

Script de référence 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)

Script de référence 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);
})();

Interprétation des résultats

Médiane vs P90

  • Médiane — L'expérience typique. Utilisez-le pour la planification des capacités.
  • P90 — Le « pire des cas » pour 9 résolutions sur 10. Utilisez-le pour les paramètres de délai d'attente.
  • P99 — Le véritable cas de pointe. Définissez votre délai d'attente maximum plus haut que cela.

Intervalles d'interrogation optimaux

Sur la base des tests ci-dessus, configurez l'interrogation par type CAPTCHA :

Type de CAPTCHA Attente initiale Intervalle de sondage Nombre maximum de tentatives
Image/OCR 5s 3s 15
Cloudflare Turnstile 5s 3s 15
BLS CAPTCHA 5s 3s 15
reCAPTCHA v2 15s 5s 20
reCAPTCHA v3 10s 5s 20
GeeTest v3 12s 5s 20
reCAPTCHA Entreprise 15s 5s 25

Dépannage

Problème Parce que Corriger
Résolvez des temps plus élevés que ceux indiqués Problèmes de latence réseau ou de proxy Test depuis une région plus proche des serveurs CaptchaAI
Résultats incohérents entre les exécutions Variation de difficulté CAPTCHA Augmenter la taille de l'échantillon à plus de 50 analyses
De nombreux délais d'attente Clé de site ou URL de page non valide Vérifiez les paramètres avec un seul test manuel
ERROR_ZERO_BALANCE pendant le benchmark Solde insuffisant pour toutes les courses Rechargez avant d'exécuter de grands benchmarks

FAQ

Les temps de résolution varient-ils selon l’heure de la journée ?

Oui. Les heures de pointe (heures ouvrables aux États-Unis) peuvent afficher des temps de résolution légèrement plus longs en raison d'une demande plus élevée. Exécutez des benchmarks à différents moments pour une image complète.

Dois-je utiliser ces données pour les paramètres de délai d’expiration de la production ?

Utilisez les valeurs P90 pour les délais d'attente standard et P99 pour les délais d'attente maximum. Ajoutez un tampon de 20 % pour tenir compte de la variabilité du réseau.

Comment les paramètres de proxy affectent-ils les temps de résolution ?

Si vous fournissez un proxy, CaptchaAI achemine la résolution via celui-ci. Les proxys lents ou distants peuvent ajouter 5 à 15 secondes au temps de résolution total. Pour l’analyse comparative, testez séparément avec et sans proxy.

Articles connexes

Prochaines étapes

Exécutez les scripts de référence sur votre propre compte et les cibles CAPTCHA – récupérez votre clé API CaptchaAI.

Guides associés :

Les commentaires sont désactivés pour cet article.