Hinweis: Die Benchmarks und Vergleichswerte in diesem Artikel basieren auf internen Messungen und können je nach Region, Traffic-Muster und CAPTCHA-Konfiguration variieren. Eigene Tests mit realen Workflows sollten die maßgebliche Grundlage für Entscheidungen sein.
Die einzige Lösungszeit, auf die Sie sich verlassen sollten, ist die, die Sie selbst gemessen haben. Ein veröffentlichter Median sagt nichts über Ihre Region, Ihre Serverlast oder Ihren CAPTCHA-Mix aus – und genau diese Faktoren entscheiden über den Durchsatz Ihrer Pipeline. Belastbar wird ein Vergleich erst, wenn Sie jeden Anbieter mit derselben Methodik, Region und Konfiguration vermessen und dabei Median, P90 und P99 sauber erheben.
Messmethodik: Median, P90 und P99 sauber erheben
Für jeden CAPTCHA-Typ:
1. Submit task to provider API
2. Start timing from submission
3. Poll until result received
4. Record total elapsed time
5. Repeat 100 times per provider
6. Calculate: median, P50, P90, P99
Gemessen wird durchgängig: Netzwerklatenz, Warteschlangenzeit und Lösungszeit fließen in denselben Wert ein. Der Median beschreibt den Normalfall, P90 und P99 die Ausreißer unter Last.
Vergleichsvorlage nach CAPTCHA-Typ
Tragen Sie Ihre Messwerte in die folgende Vorlage ein, um Anbieter unter denselben Bedingungen gegenüberzustellen:
| CAPTCHA-Typ | Anbieter | Median (intern) | P90 (intern) | P99 (intern) | Stichprobe | Hinweis |
|---|---|---|---|---|---|---|
| reCAPTCHA v2 | Anbieter A | eintragen | eintragen | eintragen | n=100 | interne Stichprobe |
| reCAPTCHA v2 | Anbieter B | eintragen | eintragen | eintragen | n=100 | gleiche Region/Last |
| reCAPTCHA v3 | Anbieter A | eintragen | eintragen | eintragen | n=100 | Action-Parameter dokumentieren |
| Turnstile | Anbieter A | eintragen | eintragen | eintragen | n=100 | Widget-Modus notieren |
| Image/OCR | Anbieter A | eintragen | eintragen | eintragen | n=100 | Bildqualität protokollieren |
| GeeTest v3 | Anbieter A | eintragen | eintragen | eintragen | n=100 | Challenge-Typ protokollieren |
| BLS/Custom | Anbieter A | eintragen | eintragen | eintragen | n=100 | Support vorab prüfen |
Von der Lösungszeit zur Kapazitätsplanung
Aus dem Median leiten Sie ab, wie viele Lösungen ein Slot pro Stunde schafft:
Kapazitätsformel:
solves_per_hour = 3600 / gemessene_durchschnittszeit
Beispiel:
3600s / 18s = 200 Lösungen pro Stunde und Slot
Nutzen Sie hier Ihre eigenen Messwerte pro Anbieter und CAPTCHA-Typ.
Für mehrere Slots multiplizieren Sie den Wert mit Ihrer Parallelität. CaptchaAI rechnet pro Thread ab – ein Thread ist ein gleichzeitig laufendes CAPTCHA, ein Slot hier also ein Thread:
| Gleichzeitige Slots | Formel | Beispiel bei 18 s Mittelwert |
|---|---|---|
| 1 | 3600 / avg_s |
200/h |
| 5 | 5 * 3600 / avg_s |
1.000/h |
| 10 | 10 * 3600 / avg_s |
2.000/h |
| 50 | 50 * 3600 / avg_s |
10.000/h |
Der BASIC-Tarif (15 $/Monat, 5 Threads) deckt fünf Slots ab; für mehr Durchsatz nutzen Sie die größeren Tarife.
Mess-Skript für die eigene Umgebung
Das Skript misst die End-to-End-Zeit über mehrere Durchläufe und gibt Median, Mittelwert und Streuung aus. Ersetzen Sie YOUR_API_KEY und die Sitekeys; setzen Sie runs in der Praxis auf 50 bis 100:
import requests
import time
import statistics
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://ocr.captchaai.com"
def benchmark_solve(method, runs=10, **params):
"""Benchmark solve times for a CAPTCHA type."""
times = []
for i in range(runs):
start = time.time()
# Submit
data = {"key": API_KEY, "method": method, "json": 1}
data.update(params)
resp = requests.post(f"{BASE_URL}/in.php", data=data)
task_id = resp.json()["request"]
# Poll
while True:
time.sleep(3)
result = requests.get(f"{BASE_URL}/res.php", params={
"key": API_KEY, "action": "get",
"id": task_id, "json": 1,
})
r = result.json()
if r["request"] != "CAPCHA_NOT_READY":
break
elapsed = time.time() - start
times.append(elapsed)
print(f" Run {i+1}: {elapsed:.1f}s")
print(f"\nResults ({runs} runs):")
print(f" Median: {statistics.median(times):.1f}s")
print(f" Mean: {statistics.mean(times):.1f}s")
print(f" Min: {min(times):.1f}s")
print(f" Max: {max(times):.1f}s")
print(f" StdDev: {statistics.stdev(times):.1f}s")
return times
# Benchmark reCAPTCHA v2
print("=== reCAPTCHA v2 ===")
benchmark_solve(
"userrecaptcha",
googlekey="SITE_KEY",
pageurl="https://example.com",
runs=10,
)
# Benchmark Turnstile
print("\n=== Turnstile ===")
benchmark_solve(
"turnstile",
sitekey="SITE_KEY",
pageurl="https://example.com",
runs=10,
)
Beispiel: Region und Latenz im DACH-Raum
Die Netzwerklatenz ist ein oft unterschätzter Anteil der End-to-End-Zeit. Wer seine Worker bei Hetzner in Falkenstein oder Nürnberg, bei netcup oder in einer Frankfurter Cloud-Region betreibt, misst andere Werte als aus einer US-Region. Messen Sie deshalb aus der Region, aus der später produktiv gelöst wird; ein Job in GitLab CI oder GitHub Actions hält die Reihe reproduzierbar.
Zeitfenster getrennt betrachten
Last und Tageszeit verschieben Messwerte spürbar – prüfen Sie die Fenster einzeln:
| Zeitraum | Ihre Messung Anbieter A | Ihre Messung Anbieter B | Notiz |
|---|---|---|---|
| Wochentag 9-17 | eintragen | eintragen | Normalbetrieb |
| Wochentag 17-23 | eintragen | eintragen | Abendlast |
| Nacht 23-06 | eintragen | eintragen | Randzeit |
| Wochenende | eintragen | eintragen | Wochenendlast |
| Feiertag/Event | eintragen | eintragen | Sonderlast |
Richtwerte richtig einordnen
- Nutzen Sie interne Richtwerte als Startpunkt der Kapazitätsplanung, nicht als Zusage.
- Validieren Sie jede Zahl in Ihrer eigenen Umgebung mit identischer Methodik.
- Vergleichen Sie nie unterschiedliche Regionen, Lastmuster oder Abfrageintervalle.
- Dokumentieren Sie Fehler- und Akzeptanzquote parallel zur Zeitmessung.
reCAPTCHA v3 zeigt teils kürzere Messwerte, weil keine interaktive Aufgabe erscheint – auch das bleibt ein Richtwert.
Fehlerbehebung bei abweichenden Messwerten
| Problem | Ursache | Lösung |
|---|---|---|
| Langsamer als Benchmarks | Netzwerklatenz | Aus näherer Region testen, Abfrageintervall reduzieren |
| Hohe P99-Zeiten | Gelegentlich komplexe CAPTCHAs | Normale Varianz, Median zur Planung verwenden |
| Längere Lösungszeiten | Anbieter unter Last | Trends überwachen und ein Failover in Betracht ziehen |
| Die Abfrage ergab oft „nicht bereit". | Abfrageintervall zu kurz | 5-Sekunden-Intervalle statt 1-Sekunden-Intervalle nutzen |
FAQ
Welche Faktoren verfälschen einen CAPTCHA-Benchmark am häufigsten?
Region, Lastzustand und Abfrageintervall. Halten Sie sie für alle Anbieter identisch, sonst messen Sie vor allem Latenz.
Wie viele Messdurchläufe brauche ich pro CAPTCHA-Typ?
50 bis 100 je Typ und Anbieter. Bei weniger schwankt der Median zu stark, und P90 sowie P99 werden von Ausreißern dominiert.
Warum liegen P90 und P99 deutlich über dem Median?
Weil komplexe Abfragen oder kurze Lastspitzen wenige Läufe verlängern. Der Median beschreibt den Normalfall, die hohen Perzentile die Reserve für Lastphasen.
Median oder Mittelwert für die Kapazitätsplanung?
Den Median, weil er robust gegen Ausreißer ist; P90 liefert den Puffer für Lastspitzen. Der Mittelwert wird durch lange Läufe verzerrt.
Verwandte Leitfäden
Messen Sie die CAPTCHA-Lösungszeit in Ihrer eigenen Umgebung – CaptchaAI bietet eine Benchmark-freundliche API.