Eine CAPTCHA-Lösung besteht aus vier Latenzkomponenten: Anforderung senden, Warten in der Warteschlange, Solver-Ausführung und Abfrageabruf. Sie können die Ausführungszeit des Solvers nicht steuern, aber Sie können alles andere optimieren.
Grundlatenz nach CAPTCHA-Typ
| CAPTCHA-Typ | Typische Lösungszeit | Am besten erreichbar |
|---|---|---|
| Bild/OCR | 2-5s | 1-3s |
| reCAPTCHA v2 | 15-30er Jahre | 10-20s |
| reCAPTCHA v3 | 10-20s | 8-15s |
| Cloudflare Turnstile | 10-25s | 8-15s |
| GeeTest v3 | <12s | <12s |
Die Spalte „Bestmögliches“ gibt an, was Sie nach Anwendung der unten aufgeführten Optimierungen erhalten.
1. Optimieren Sie die Abfrageintervalle
Das standardmäßige Abfrageintervall von 5 Sekunden verschwendet Zeit, wenn die Lösung zwischen den Abfragen abgeschlossen ist. Nutzen Sie adaptives Polling – schnell beginnen und dann wieder aufhören:
Python
import time
import requests
API_KEY = "YOUR_API_KEY"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def adaptive_poll(task_id, timeout=120):
"""Start polling at 3s, increase to 5s after 4 polls."""
start = time.time()
interval = 3 # start aggressive
polls = 0
while time.time() - start < timeout:
time.sleep(interval)
polls += 1
resp = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get",
"id": task_id, "json": "1"
}).json()
if resp["status"] == 1:
elapsed = time.time() - start
print(f"Solved in {elapsed:.1f}s ({polls} polls)")
return resp["request"]
if resp["request"] != "CAPCHA_NOT_READY":
raise Exception(resp["request"])
# Back off after initial fast polls
if polls >= 4:
interval = 5
raise TimeoutError(f"Task {task_id} timed out")
JavaScript
async function adaptivePoll(taskId, apiKey, timeout = 120000) {
const start = Date.now();
let interval = 3000;
let polls = 0;
while (Date.now() - start < timeout) {
await new Promise(r => setTimeout(r, interval));
polls++;
const resp = await fetch(
`https://ocr.captchaai.com/res.php?key=${apiKey}&action=get&id=${taskId}&json=1`
);
const data = await resp.json();
if (data.status === 1) {
console.log(`Solved in ${((Date.now() - start) / 1000).toFixed(1)}s (${polls} polls)`);
return data.request;
}
if (data.request !== 'CAPCHA_NOT_READY') {
throw new Error(data.request);
}
if (polls >= 4) interval = 5000;
}
throw new Error(`Task ${taskId} timed out`);
}
Spart durchschnittlich 1–4 Sekunden im Vergleich zu einem festen 5-Sekunden-Intervall.
2. Verbindungspooling
Verwenden Sie HTTP-Verbindungen wieder, anstatt für jede Umfrage neue zu öffnen:
Python
session = requests.Session()
# Use session.get() and session.post() instead of requests.get/post
# The session reuses TCP connections automatically
JavaScript (Node.js)
const { Agent } = require('http');
const axios = require('axios');
const client = axios.create({
httpAgent: new Agent({ keepAlive: true, maxSockets: 10 }),
timeout: 10000,
});
// Use client.get() and client.post() for all API calls
Spart ca. 50–100 ms pro Anfrage, indem TCP/TLS-Handshakes übersprungen werden.
3. CAPTCHAs vorab abrufen
Senden Sie CAPTCHA-Aufgaben, bevor Sie die Token benötigen. Während Ihr Scraper Seite N verarbeitet, senden Sie das CAPTCHA für Seite N+1:
from concurrent.futures import ThreadPoolExecutor
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
def prefetch_submit(sitekey, page_url):
resp = session.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": "1",
})
data = resp.json()
if data["status"] == 1:
return data["request"]
raise Exception(data["request"])
# Submit next page's CAPTCHA while processing current page
with ThreadPoolExecutor(max_workers=2) as pool:
# Submit CAPTCHA for page 2 while processing page 1
future_task = pool.submit(prefetch_submit, "6Le-SITEKEY", "https://example.com/page/2")
# Process page 1...
process_page(current_data)
# Now get the pre-submitted task ID and poll
task_id = future_task.result()
token = adaptive_poll(task_id)
Eliminiert die gesamte Wartezeit durch Überlappung der Lösung mit der Verarbeitung.
4. Verwenden Sie die richtige CAPTCHA-Methode
CaptchaAI unterstützt manchmal schnellere Methoden für bestimmte Szenarien:
| Szenario | Langsame Methode | Schnellere Alternative |
|---|---|---|
| reCAPTCHA v2 mit bekanntem Rückruf | userrecaptcha + Umfrage |
userrecaptcha mit pingback (Rückruf-URL) |
| Bildtext CAPTCHA | base64 mit hoher Auflösung |
base64 mit numeric=1, wenn nur Ziffern |
5. Überspringen Sie den Proxy, wenn er nicht benötigt wird
Proxy-Routing erhöht die Latenz. Senden Sie Proxy-Parameter nur, wenn die Zielsite Anforderungen von bestimmten IPs erfordert:
# Without proxy — faster for most use cases
data = {
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": "1",
}
# With proxy — only when required
data["proxy"] = "user:pass@1.2.3.4:8080"
data["proxytype"] = "HTTP"
6. Verwenden Sie Rückruf-URLs anstelle von Abfragen
Eliminieren Sie die Abfrage vollständig mit dem Parameter pingback:
resp = session.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": "1",
"pingback": "https://your-server.com/captcha-callback",
})
CaptchaAI sendet das Ergebnis an Ihre URL, wenn die Lösung abgeschlossen ist. Keine Abfrageschleife erforderlich. Dies ist die schnellste Abrufmethode.
7. Benchmarken Sie Ihre Optimierungen
import statistics
def benchmark(solve_func, iterations=20):
times = []
for i in range(iterations):
start = time.time()
try:
solve_func()
times.append(time.time() - start)
except Exception:
pass
if times:
print(f"Samples: {len(times)}/{iterations}")
print(f"Mean: {statistics.mean(times):.1f}s")
print(f"Median: {statistics.median(times):.1f}s")
print(f"P95: {sorted(times)[int(len(times)*0.95)]:.1f}s")
print(f"Min: {min(times):.1f}s")
print(f"Max: {max(times):.1f}s")
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| Umfragelatenz unverändert | Ich verwende requests.get() immer noch ohne Sitzung |
Wechseln Sie zu session.get() |
| Prefetch-Tokens verfallen vor der Verwendung | Die Bearbeitung dauert zu lange | Reduzieren Sie das Prefetch-Fenster oder übermitteln Sie es näher an die Nutzung |
| Die Rückruf-URL empfängt niemals Daten | Der Server ist von CaptchaAI aus nicht erreichbar | Stellen Sie sicher, dass die URL öffentlich ist und die Firewall-Regeln korrekt sind |
| Schnellere Abfragen führen zu Ratenbeschränkungen | Zu aggressiv abfragen (< 2 Sek.) | Halten Sie das Mindestintervall bei 3 Sekunden |
FAQ
Was ist die größte Einzeloptimierung?
Vorabholen. Es überlappt die Lösungszeit mit der Verarbeitungszeit und reduziert so die wahrgenommene Latenz bei sequentiellen Arbeitsabläufen effektiv auf nahezu Null.
Hilft adaptives Polling bei Bild-CAPTCHAs?
Weniger. Bild-CAPTCHAs lösen sich in 2–5 Sekunden auf, daher werden sie oft schon bei der ersten Umfrage nach 3 Sekunden erkannt. Die Verbesserung ist bei reCAPTCHA deutlicher spürbar (15–30 Sekunden).
Holen Sie sich die schnellste CAPTCHA-Lösung mit CaptchaAI
Holen Sie sich Ihren API-Schlüssel unter captchaai.com.
Verwandte Leitfäden
- Parallele vs. sequenzielle CAPTCHA-Leistung
- Connection-Keepalive und HTTP/2 für CAPTCHA-API
- Rate-Limits und Drosselung