İlk CAPTCHA çözümünüz dört adım uzakta: görevi gönderin, dönen kimliği saklayın, sonucu sorgulayın ve token'ı hedef sayfaya yazın. Bu rehber sizi kayıt ekranından çalışan koda beş dakikada götürür — arada teori yok, sadece kopyalayıp çalıştırabileceğiniz kod. Türkiye'den çalışıyorsanız akılda tutulacak tek ticari ayrıntı şu: CaptchaAI thread tabanlı planlarla ve USD üzerinden faturalanır, çözüm başına değil; yani aylık maliyetiniz kur dalgalanmasından bağımsız olarak öngörülebilir kalır.
CaptchaAI'nin desteklediği her CAPTCHA türü aynı dört adımlı akışı paylaşır:
- Gönderin — CAPTCHA bilgilerini
in.php'ye POST edin - Görev kimliğini saklayın — yanıttaki
requestdeğerini kaydedin - Sorgulayın — sonuç hazır olana kadar
res.php'yi periyodik olarak sorgulayın - Token'ı kullanın — çözülen token'ı hedef forma veya isteğe enjekte edin
Bu mantığı bir kez kavradığınızda aynı akışı reCAPTCHA v2, GeeTest v3 veya görüntü OCR'ına uyarlamak yalnızca method parametresini değiştirmekten ibarettir.
Bu rehberdeki örnekler Cloudflare Turnstile üzerinedir, ancak akış tüm desteklenen türler için birebir aynıdır. Başlamadan önce yalnızca bir CaptchaAI hesabı ve 32 karakterlik bir API anahtarı gerekir.
Adım 0: CaptchaAI API anahtarınızı alın
- captchaai.com üzerinden ücretsiz kayıt olun
- Kontrol panelinizi açın
- 32 karakterlik API anahtarınızı kopyalayın
Görev gönderebilmek için hesabınızda en az bir aktif thread bulunmalıdır. Hizmeti değerlendiriyorsanız ücretsiz deneme için destek ekibiyle iletişime geçin; en küçük ücretli plan olan BASIC ($15/ay, 5 thread) tek bir test makinesi için fazlasıyla yeterlidir.
Adım 1: İlk CAPTCHA'yı gönderin
Aşağıdaki örnek, en sık karşılaşılan türlerden biri olan Cloudflare Turnstile'ı çözer. Senaryo tanıdık gelecek: bir e-ticaret projesinde staging ortamındaki giriş akışını otomatik test ediyorsunuz ve formun önünde bir Turnstile widget'ı duruyor. Görevi göndermek için hedef sayfadan iki değere ihtiyacınız var:
- sitekey — Turnstile widget'ının açık anahtarı;
data-sitekeyözniteliğinde veya Turnstile script parametrelerinde bulunur ve0xile başlar - pageurl — widget'ın yüklendiği sayfanın tam URL'si
cURL
curl -X POST "https://ocr.captchaai.com/in.php" \
-d "key=YOUR_API_KEY" \
-d "method=turnstile" \
-d "sitekey=0x4AAAAAAAC3DHQFLr1GavNl" \
-d "pageurl=https://staging.example.com/qa-login" \
-d "json=1"
Python
import requests
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "turnstile",
"sitekey": "0x4AAAAAAAC3DHQFLr1GavNl",
"pageurl": "https://staging.example.com/qa-login",
"json": 1,
})
print(response.json())
Node.js
const response = await fetch("https://ocr.captchaai.com/in.php", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: "YOUR_API_KEY",
method: "turnstile",
sitekey: "0x4AAAAAAAC3DHQFLr1GavNl",
pageurl: "https://staging.example.com/qa-login",
json: "1",
}),
});
console.log(await response.json());
PHP
<?php
$response = file_get_contents("https://ocr.captchaai.com/in.php?" . http_build_query([
"key" => "YOUR_API_KEY",
"method" => "turnstile",
"sitekey" => "0x4AAAAAAAC3DHQFLr1GavNl",
"pageurl" => "https://staging.example.com/qa-login",
"json" => 1,
]));
echo $response;
Adım 2: Görev kimliğini (task ID) saklayın
Başarılı bir yanıt şöyle görünür:
{
"status": 1,
"request": "71823469"
}
request alanı görevinizin kimliğidir; sonucu çekmek için bu değere ihtiyacınız olacak.
status değeri 0 dönerse bir sorun var demektir ve hata kodu yine request alanında gelir:
| Hata | Anlamı | Çözüm |
|---|---|---|
ERROR_WRONG_USER_KEY |
API anahtarı format hatası | 32 karakter olduğunu doğrulayın |
ERROR_KEY_DOES_NOT_EXIST |
Anahtar bulunamadı | Panelden anahtarı tekrar kontrol edin |
ERROR_ZERO_BALANCE |
Boşta thread yok | Bakiye yükleyin veya bir thread boşalana kadar bekleyin |
ERROR_PAGEURL |
pageurl parametresi eksik |
Tam URL'yi ekleyin |
ERROR_WRONG_GOOGLEKEY |
sitekey boş veya hatalı | sitekey'i tekrar çıkarın (Turnstile için 0x ile başlar) |
Yukarıdaki tablo yalnızca ilk çağrıda en sık karşılaşılan hataları kapsar; her kod, sorunu doğrudan
requestalanında adıyla bildirir.
Adım 3: Sonucu sorgulayın ve token'ı bekleyin
İlk sorgudan önce 15 saniye bekleyin, ardından sonuç gelene kadar her 5 saniyede bir sorgulayın. Turnstile için tipik çözüm süresi 15–30 saniyedir; erken ya da çok sık sorgulamak süreci hızlandırmaz, yalnızca bir eşzamanlı thread'i boşuna meşgul tutar.
İpucu:
CAPCHA_NOT_READYyanıtı 60 saniyeden uzun sürüyorsa görev büyük olasılıkla takılmıştır. Döngüye bir zaman aşımı ekleyin, görevi iptal edip yeniden gönderin.
Python
import time
time.sleep(15)
while True:
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "get",
"id": "71823469",
"json": 1,
}).json()
if result.get("request") == "CAPCHA_NOT_READY":
time.sleep(5)
continue
if result.get("status") == 1:
token = result["request"]
print(f"Solved! Token: {token[:60]}...")
break
raise RuntimeError(result)
Node.js
await new Promise((r) => setTimeout(r, 15000));
while (true) {
const r = await fetch(
`https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=71823469&json=1`,
);
const data = await r.json();
if (data.request === "CAPCHA_NOT_READY") {
await new Promise((r) => setTimeout(r, 5000));
continue;
}
if (data.status === 1) {
console.log("Solved:", data.request.slice(0, 60));
break;
}
throw new Error(JSON.stringify(data));
}
Adım 4: token'ı hedef sayfaya enjekte edin
Enjeksiyon biçimi CAPTCHA türüne göre değişir:
- Turnstile / reCAPTCHA — token'ı
cf-turnstile-responseveyag-recaptcha-responsealanına yazın ya da sayfanın callback fonksiyonunu çağırın. - Görüntü OCR — tanınan metni ilgili cevap input'una yerleştirin.
- GeeTest v3 — yanıtta dönen alanları sitenin beklediği biçimde birleştirin.
Tarayıcı içinde en yalın enjeksiyon şöyledir:
document.querySelector('[name="cf-turnstile-response"]').value = token;
document.querySelector("form").submit();
Token'lar tek kullanımlıktır ve yaklaşık 120 saniye içinde geçerliliğini yitirir — gönderin, kullanın, atın; asla önbelleğe almayın.
Yerel senaryo: e-ticaret checkout akışını test etmek
Türkiye'deki geliştirici ekiplerin çoğu zamanını e-ticaret ve fintech entegrasyonlarına ayırır; bu da CAPTCHA'yı çoğu zaman bir ödeme veya giriş akışının önünde duran bir QA engeli olarak gündeme getirir. Diyelim ki staging ortamında bir satın alma akışını uçtan uca test eden bir otomasyon süitiniz var ve giriş adımında Turnstile devreye giriyor. Yukarıdaki dört adımlı akışı test kodunuza ekleyerek widget'ı manuel tıklamaya gerek kalmadan otomatik çözebilir, böylece gece çalışan regresyon testlerinizi kesintisiz sürdürebilirsiniz.
İki noktaya dikkat edin: örneklerdeki gibi yalnızca kendi sahip olduğunuz veya test izniniz bulunan ortamlarda çalışın (staging.example.com/qa-login gibi), ve kişisel veri içeren akışları test ediyorsanız KVKK kapsamında yalnızca yetkili QA veri setleri kullanın. Fiyat tarafında ise plan seçimi tamamen eşzamanlılıkla ilgilidir: tek bir test makinesi için BASIC ($15/ay, 5 thread) yeterken, paralel çalışan çok sayıda worker için daha yüksek thread'li bir plana yükseltmeniz gerekir.
Yaygın başlangıç hataları
- API anahtarında boşluk — baştaki ve sondaki boşlukları temizleyin.
pageurl'de protokol eksik — değerhttps://...ile başlamalı.- Çok erken ilk sorgu — token tabanlı CAPTCHA'larda ilk sorgudan önce ~15 saniye bekleyin.
- Çok sık sorgu — 5 saniyelik aralık yeterlidir; daha sıkı sorgu hız kazandırmaz.
- Yanlış sitekey — sitekey sayfaya bağlıdır; başka bir siteden kopyalanan anahtar, hedefin reddettiği bir token üretir.
- Thread tükenmiş — API hata kodları sayfasını ve planınızdaki thread sayısını kontrol edin.
Sık sorulan sorular
CaptchaAI hCaptcha'yı çözüyor mu? Hayır. CaptchaAI şu anda hCaptcha ve FunCaptcha'yı (Arkose Labs) desteklemez. Desteklenen türler reCAPTCHA v2/v3, Cloudflare Turnstile ve Cloudflare doğrulama akışı, GeeTest v3, görüntü/OCR, grid ve BLS'tir; CaptchaFox (beta), Friendly Captcha (beta) ve Lemin (beta) ayrıca beta olarak sunulur.
Neden ilk sorgudan önce 15 saniye beklemem gerekiyor?
Turnstile gibi token tabanlı CAPTCHA'ların çözülmesi zaman alır. t=0 anında sorgularsanız yalnızca CAPCHA_NOT_READY alırsınız ve bir eşzamanlı thread'i gereksiz yere meşgul edersiniz. 15 saniye bekleyip 5 saniyelik aralıklarla sorgulamak en verimli ritimdir.
Fiyatlar TL mi yoksa USD mi? Planlar USD üzerinden ve thread tabanlı faturalanır — çözüm başına değil. BASIC ($15/ay, 5 thread) ile başlayıp ihtiyaca göre daha yüksek thread'li planlara geçebilirsiniz. Öngörülebilir aylık USD maliyeti, kur dalgalanmasına karşı gerçek bir avantajdır.
Token'ı hedef site neden reddediyor?
En yaygın nedenler: yanlış sayfaya ait bir sitekey kullanmak, token'ın süresinin dolması (~120 saniye) ve token'ı yanlış alana yazmak. Turnstile için doğru alan cf-turnstile-response'tur.
Ücretsiz deneme sürümü var mı? Hizmeti değerlendiriyorsanız ücretsiz deneme için destek ekibiyle iletişime geçebilirsiniz. Görev gönderebilmeniz için hesabınızda en az bir aktif thread bulunması gerekir.
Diğer CAPTCHA türlerine uyarlama
Gönder–sorgula–kullan döngüsü tüm türlerde aynı kalır; yalnızca method parametresini ve hedef sayfadaki token alanını değiştirirsiniz. Sık kullanılan yöntem karşılıkları:
| CAPTCHA türü | method |
Durum |
|---|---|---|
| Cloudflare Turnstile | turnstile |
Destekleniyor |
| reCAPTCHA v2 / v3 | userrecaptcha |
Destekleniyor |
| GeeTest v3 | geetest |
Destekleniyor |
| Görüntü / OCR | post |
Destekleniyor |
| CaptchaFox / Friendly Captcha / Lemin | captchafox / friendly_captcha / lemin |
Beta |
| hCaptcha, FunCaptcha (Arkose Labs), GeeTest v4 | — | Desteklenmiyor |
GeeTest v4 için resmî durum "çok yakında"dır; henüz kullanılamaz.