CAPTCHA çözüm süresini kısaltmanın yolu çözücünün daha hızlı olmasını beklemek değil, kendi entegrasyonunuzdaki ölü zamanı temizlemektir. Bir çözüm çağrısının gecikmesi dört parçadan oluşur:
- İstek gönderme — görevin CaptchaAI'ye ulaşması.
- Kuyrukta bekleme — çözücünün görevi almasına kadar geçen süre.
- Çözücü yürütmesi — asıl çözüm; CAPTCHA türüne göre değişir ve dışarıdan kısaltamazsınız.
- Sonuç alma — çözülen token'ın size dönmesi.
Bu dördünden yalnızca çözücü yürütmesi kontrolünüz dışındadır; diğer üçünü doğru kurduğunuzda aynı CaptchaAI planıyla belirgin biçimde daha hızlı sonuç alırsınız. İstanbul'da bir e-ticaret projesinin QA akışını teslim tarihine yetiştiren bir otomasyon geliştiricisiyseniz bu saniyeler dakikalara döner — thread tabanlı fiyatlandırmada (BASIC $15/ay, 5 thread) her thread'i daha erken boşa çıkarmak aynı bütçeyle daha çok iş demektir. Bu rehberdeki her adımın çalışan Python ve Node.js karşılığı var.
CAPTCHA türüne göre gecikme referansı
| CAPTCHA türü | SLA tavanı | Ulaşılabilir en iyi |
|---|---|---|
| Image/OCR | <0.5s | 0.2–0.4s |
| reCAPTCHA v2 | <60s | 10–20s |
| reCAPTCHA v3 | <4s | 1–3s |
| Cloudflare Turnstile | <10s | 4–8s |
| GeeTest v3 | <12s | 6–10s |
Aşağıdaki değerler gözlemlenen verilere ve kullanıcı raporlarına dayanır. Sonuçlar ortama, hacme ve zamana göre değişebilir.
SLA tavanı, CaptchaAI'nin ilgili tür için yayınladığı üst sınırdır — ortalama değil. "Ulaşılabilir en iyi" sütunu ise aşağıdaki optimizasyonları uyguladıktan sonra tipik olarak gördüğünüz aralığı yansıtır. reCAPTCHA v2 gibi türlerde çözücü yürütmesi baskın olduğu için kazancınız görecelidir; hızlı türlerde ağ ve sorgulama optimizasyonları oransal olarak daha çok fark yaratır.
Optimizasyon yol haritası
Sınırlı zamanınız varsa etkiye göre şu sırayla ilerleyin:
- Ön gönderme — en büyük tek kazanç; çözümü işlemeyle örtüştürür.
- callback URL — sorgulama döngüsünü tümden kaldırır.
- Uyarlanabilir sorgulama ve bağlantı havuzu — kalan ağ turlarını kısaltır.
- proxy — yalnızca hedef site gerçekten gerektiriyorsa ekleyin.
1. Sorgulama aralığını uyarlanabilir hale getirin
Varsayılan 5 saniyelik sabit sorgulama aralığı, çözüm iki sorgu arasında tamamlandığında zaman kaybettirir. Bunun yerine hızlı başlayıp sonra geri çekilen uyarlanabilir bir sorgulama kullanın: ilk saniyelerde sık, ardından seyrek.
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`);
}
- Sabit 5 saniyelik aralığa kıyasla ortalama 1–4 saniye kazandırır.
- İlk aralığı 3 saniyenin altına indirmeyin; daha agresif sorgulama hız sınırına takılabilir.
2. HTTP bağlantılarını yeniden kullanın
Her sorgu için yeni bağlantı açmak yerine mevcut TCP bağlantısını tekrar kullanın. Uzun süren bir kazıma işinde bu, yüzlerce gereksiz el sıkışmayı ortadan kaldırır.
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
TCP/TLS el sıkışmalarını atladığı için istek başına yaklaşık 50–100 ms kazandırır. Tek başına küçük görünse de, sürekli çalışan bir worker'da toplam etkisi büyüktür.
3. CAPTCHA görevlerini önceden gönderin
token'a ihtiyaç duymadan önce görevi gönderin. Kazıyıcınız N. sayfayı işlerken, N+1. sayfanın CAPTCHA'sını arka planda gönderin; sıra o sayfaya geldiğinde token çoktan hazır olur.
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)
- Çözümü işleme adımıyla örtüştürdüğü için tam bekleme süresini pratikte ortadan kaldırır.
- token'ın süresi dolmadan kullanılması gerekir; işleme çok uzun sürüyorsa ön gönderme penceresini daraltın.
4. Senaryoya uygun CAPTCHA yöntemini seçin
CaptchaAI, bazı senaryolar için daha hızlı yöntemleri destekler. Doğru parametreyi seçmek, çözücü tarafındaki işi hafifletir:
| Senaryo | Yavaş yöntem | Daha hızlı alternatif |
|---|---|---|
| Bilinen callback ile reCAPTCHA v2 | userrecaptcha + sorgulama |
pingback ile userrecaptcha (callback URL) |
| Görsel metin CAPTCHA | Yüksek çözünürlüklü base64 |
Yalnızca rakam varsa base64 + numeric=1 |
pingback yöntemi erişilebilir bir callback uç noktası gerektirir; böyle bir uç noktanız yoksa userrecaptcha + sorgulamada kalın.
5. Gerekmedikçe proxy kullanmayın
proxy yönlendirmesi her isteğe ek gecikme bindirir. proxy parametrelerini yalnızca hedef site belirli IP'lerden istek beklediğinde gönderin; çoğu iş akışında bunlar olmadan çalışmak daha hızlıdır.
# 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"
proxy'siz çalışmak çoğu senaryoda istek başına birkaç yüz milisaniye kazandırır; yalnızca IP kısıtlı hedeflerde parametreleri ekleyin.
6. Sorgulama yerine callback URL kullanın
pingback parametresiyle sorgulama döngüsünü tamamen kaldırabilirsiniz:
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",
})
- Çözüm tamamlandığında CaptchaAI sonucu doğrudan URL'nize gönderir; sorgu döngüsü kurmanız gerekmez.
- Sonucu almanın en düşük gecikmeli yoludur; karşılığında genel erişilebilir bir uç nokta ve sonucu doğrulayan bir callback işleyicisi ister — bu yüzden kısa ömürlü scriptler yerine sürekli çalışan servisler için uygundur.
7. Optimizasyonlarınızı ölçün
Değişikliklerin işe yaradığını varsaymayın; ölçün. Aşağıdaki küçük ölçüm yardımcısı ortalama, medyan ve P95 değerlerini verir:
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")
P95'e dikkat edin: ortalama iyi görünse bile kuyruğun uzun kuyruk değerleri gerçek kullanıcı deneyimini belirler. Optimizasyon öncesi ve sonrası aynı ölçümü çalıştırıp farkı karşılaştırın.
Sorun giderme
Optimizasyonlardan sonra hâlâ beklediğinizden yavaşsanız, en sık karşılaşılan dört durum ve çözümleri:
| Sorun | Neden | Çözüm |
|---|---|---|
| Sorgulama gecikmesi değişmedi | Hâlâ oturumsuz requests.get() kullanılıyor |
session.get()'e geçin |
| Ön gönderilen token'lar kullanılmadan süresi doluyor | İşleme çok uzun sürüyor | Ön gönderme penceresini daraltın veya kullanıma yakın gönderin |
| callback URL'sine hiç veri gelmiyor | Sunucunuza CaptchaAI'den erişilemiyor | Genel erişilebilir URL kullanın, güvenlik duvarı kurallarını düzeltin |
| Hızlı sorgulama hız sınırına takılıyor | Çok agresif sorgulama (< 2s) | Minimum aralığı 3 saniyede tutun |
Sık sorulan sorular
Sınırlı zamanım varsa önce hangi optimizasyonu yapmalıyım?
Ön gönderme. Çözüm süresini işleme süresiyle örtüştürdüğü için sıralı iş akışlarında algılanan gecikmeyi neredeyse sıfıra indirir. Zamanınız kalırsa ikinci olarak callback URL'lerine geçin.
callback (pingback) mı yoksa sorgulama mı kullanmalıyım?
Sürekli çalışan bir sunucunuz varsa callback daha düşük gecikme sağlar çünkü hiç sorgu turu yoktur. Kısa ömürlü bir script veya genel erişilebilir uç nokta açamadığınız bir ortamda ise uyarlanabilir sorgulama daha pratiktir.
Daha fazla thread almak çözüm gecikmesini düşürür mü?
Hayır. thread sayısı eşzamanlı çözüm kapasitesini, yani toplam verimi artırır; tek bir çözümün gecikmesini değiştirmez. Bir çağrının gecikmesini bu rehberdeki adımlar düşürür; daha yüksek plan (örneğin STANDARD $30/ay, 15 thread) ise aynı anda daha çok çözüm çalıştırmanızı sağlar.
reCAPTCHA v2 neden Turnstile'dan daha yavaş çözülüyor?
Çünkü SLA tavanları farklıdır: reCAPTCHA v2 <60s, Cloudflare Turnstile ise <10s. Fark çözücü yürütmesinden gelir; ağ ve sorgulama optimizasyonları yardımcı olur ama türün doğasını değiştirmez.
CaptchaAI ile çözüm gecikmenizi düşürün
API anahtarınızı şu adresten alın: captchaai.com.