Reference

Benchmarking der CAPTCHA-Lösungszeiten verschiedener Typen mit CaptchaAI

Lösen Sie Zeitprobleme. Ein Unterschied von 10 Sekunden pro Lösung führt zu einer Verzögerung von mehreren Stunden bei Tausenden von Aufgaben. Dieser Leitfaden bietet reproduzierbare Benchmarks für jeden CAPTCHA-Typ, den CaptchaAI unterstützt, plus Skripte zum Ausführen eigener Messungen.

Typische Lösungszeiten

Diese Benchmarks spiegeln die mittlere Zeit von 100 aufeinanderfolgenden Lösungen pro Typ wider, gemessen von der API-Übermittlung bis zum Abruf der Ergebnisse:

CAPTCHA-Typ Median lösen P90 Lösen P99 Lösen Erfolgsquote
reCAPTCHA v2 12–18 s 25 s ~40 s ~95 %*
reCAPTCHA v2 Unsichtbar 10–15 s ~20 s ~35 s ~95 %*
reCAPTCHA v3 8–12 s ~18 s ~30 s ~90 %*
reCAPTCHA Enterprise 15–25 s 35 s ~50 s ~90 %*
Cloudflare Turnstile 5–10 s 15 s 25 s ~99 %*
GeeTest v3 10–18 s 25 s ~40 s ~90 %*
Bild/OCR 3–8 s 12 s ~20 s ~85 %*
BLS CAPTCHA 5–10 s 15 s ~20 s ~100 %*

Die Zeiten variieren je nach Proxy-Qualität, Serverlast und CAPTCHA-Komplexität.

Hinweis: Alle Erfolgsquoten basieren auf internen Stichproben. Tatsächliche Werte können je nach Umgebung abweichen.

Faktoren, die die Lösungszeit beeinflussen

Netzwerklatenz

Ihre Entfernung von den API-Endpunkten von CaptchaAI erhöht die Hin- und Rücklaufzeit. Eine 200-ms-RTT fügt insgesamt ca. 1 Sekunde hinzu (Senden + 3–4 Umfragen × 200 ms).

Proxy-Qualität

Bei der Verwendung von Proxys liefern Privat-Proxys in der Regel schnellere Lösungen als Rechenzentrums-Proxys, da sie weniger sekundäre Herausforderungen auslösen.

CAPTCHA-Komplexität

Die Bildherausforderungen von reCAPTCHA v2 variieren im Schwierigkeitsgrad. Eine „Ampel auswählen“-Challenge mit verblassenden Bildern dauert länger als eine einfache Checkbox-Überprüfung.

Umfragestrategie

Aggressives Polling (alle 2 Sekunden) erkennt Ergebnisse schneller, erhöht jedoch die Anzahl der API-Aufrufe. Konservative Abfragen (alle 10 Sekunden) reduzieren die Last, erhöhen jedoch die Latenz.

Python-Benchmark-Skript

# 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)

JavaScript-Benchmark-Skript

// 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);
})();

Ergebnisse interpretieren

Median vs. P90

  • Median – Das typische Erlebnis. Nutzen Sie dies für die Kapazitätsplanung.
  • P90 – Der „schlimmste Fall“ für 9 von 10 Lösungen. Verwenden Sie dies für Timeout-Einstellungen.
  • P99 – Der echte Edge-Fall. Stellen Sie Ihr maximales Timeout höher ein.

Optimale Abfrageintervalle

Konfigurieren Sie die Abfrage basierend auf den oben genannten Benchmarks pro CAPTCHA-Typ:

CAPTCHA-Typ Erstes Warten Umfrageintervall Maximale Versuche
Bild/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 Enterprise 15s 5s 25

Fehlerbehebung

Problem Ursache Lösung
Ergebnis passt nicht zum eigenen Fall Solver-Typ oder Eingabeparameter wurden falsch auf den Zieltyp gemappt Vergleiche Zielseite, Solver-Methode und Pflichtparameter noch einmal systematisch
Beispiel läuft, aber Produktion scheitert Session, Header oder Proxy-Kontext weichen vom Test ab Übertrage erfolgreiche Testbedingungen möglichst unverändert in den Live-Workflow
Fehler bleiben unklar Logs enthalten zu wenig Kontext für eine belastbare Diagnose Protokolliere Solver-Typ, Latenz, Fehlercode und Downstream-Reaktion gemeinsam

Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.

Verwandte Beiträge

Explainers Auswirkungen der DNS-Auflösung auf die Leistung der CAPTCHA-API
DNS-Auflösung und ihre Auswirkungen auf die CAPTCHA-API-Performance: Latenzmessung, DNS-Caching und Optimierungsstrategien für Captcha AI.

DNS-Auflösung und ihre Auswirkungen auf die CAPTCHA-API-Performance: Latenzmessung, DNS-Caching und Optimierun...

Apr 24, 2026
DevOps & Scaling Auto-Scaling CAPTCHA-Solver-Worker
CAPTCHA-Worker dynamisch skalieren – Thread-basiertes und prozessbasiertes Auto-Scaling mit Warteschlangentiefe, Auslastungssignalen und Kontostandprüfung.

CAPTCHA-Worker dynamisch skalieren – Thread-basiertes und prozessbasiertes Auto-Scaling mit Warteschlangentief...

May 01, 2026