Bir müşterinin ödeme akışını uçtan uca test ederken otomasyonunuz "Robot değilim" onay kutusuna takıldıysa, çözüm tarayıcıyı elle tıklatmaya uğraşmak değildir: doğrulamayı bir API'ye devredersiniz. reCAPTCHA v2'yi CaptchaAI API ile çözmek dört adımlık bir iştir — sayfadan sitekey ve pageurl değerlerini çıkarın, CaptchaAI reCAPTCHA v2 çözücüsüne gönderin, sonucu sorgulayın ve dönen token'ı korumalı forma enjekte edin.
Bu rehber teori anlatmaz; giriş, kayıt, satın alma akışı ve form gönderimi otomasyonlarına gerçek entegrasyon arayan geliştiriciler için yazıldı. Aşağıdaki Python, Node.js ve PHP örneklerini kopyalayıp kendi sitekey ve pageurl değerlerinizle çalıştırabilirsiniz.
Hangi reCAPTCHA sürümüyle uğraştığınızdan emin değil misiniz? Önce reCAPTCHA sürümünü belirleme rehberini okuyun — v2, v3 ve Enterprise için gönderim parametreleri farklıdır.
Başlamadan önce neye ihtiyacınız var
Dört adımın hiçbirinde tahminde bulunmanız gerekmez; ihtiyacınız olan her şeyi baştan hazırlayın:
| Gereksinim | Detay |
|---|---|
| CaptchaAI API anahtarı | captchaai.com/api.php üzerinden alın. 32 karakterlik bir dizedir. |
| Hedef sayfa URL'si | reCAPTCHA v2 widget'ının yüklendiği tam URL. |
| sitekey | O sayfadaki widget örneğine bağlı ortak (public) anahtar. |
| HTTP istemcisi | requests, axios, fetch, curl — hangisi elinizin altındaysa. |
| Aktif thread'ler | Hesabınızda boş bir çözüm thread'i bulunmalı. |
sitekey ile pageurl çiftini yanlış almak, çözüm isteğinin başarısız olmasının bir numaralı sebebidir. Bu yüzden ilk adım en kritik olanıdır.
Adım 1: sayfadan sitekey ve pageurl'yi bulun
pageurl, reCAPTCHA'nın göründüğü sayfanın tam adresidir. Her zaman https:// şemasıyla gönderin. Widget farklı bir alt alan adındaki iframe içinde yükleniyorsa üst sayfayı değil, o iframe'in kaynak URL'sini kullanın.
sitekey için üç yerden birine bakabilirsiniz:
1. HTML'de — widget kapsayıcısındaki data-sitekey özniteliğini arayın:
<div class="g-recaptcha" data-sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"></div>
2. iframe URL'sinde — https://www.google.com/recaptcha/api2/anchor?ar=1&k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&... adresindeki k= parametresi sitekey'dir.
3. Ağ trafiğinde — DevTools → Network sekmesinde recaptcha ile filtreleyin; ilgili isteklerin birinde k parametresini görürsünüz.
Adım 2: çözüm görevini CaptchaAI'ye gönderin
Görevi in.php uç noktasına method=userrecaptcha ile gönderin. Yanıtta bir görev kimliği (task id) dönecek:
import requests
API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://staging.example.com/qa-login"
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": SITEKEY,
"pageurl": PAGEURL,
"json": 1,
}).json()
assert submit["status"] == 1, submit
task_id = submit["request"]
print("task id:", task_id)
Aynı isteğin Node.js karşılığı:
const r = await fetch("https://ocr.captchaai.com/in.php", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: API_KEY,
method: "userrecaptcha",
googlekey: SITEKEY,
pageurl: PAGEURL,
json: "1",
}),
});
const { status, request: taskId } = await r.json();
if (status !== 1) throw new Error(taskId);
Görünmez reCAPTCHA mı? Payload'a
invisible=1ekleyin; gönderim ve sorgulama akışı aynı kalır. Ayrıntı için Görünmez reCAPTCHA nasıl çalışır yazısına bakın.
Adım 3: sonucu sorgulayın
reCAPTCHA v2 çözümü genellikle 60 saniyenin altında tamamlanır. Çözücüye soluk aldırmak için ilk sorgudan önce 20 saniye bekleyin, sonra her 5 saniyede bir res.php uç noktasını sorgulayın. Çok sık sorgulamak yalnızca gereksiz istek yükü yaratır:
import time
time.sleep(20)
while True:
res = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if res.get("request") == "CAPCHA_NOT_READY":
time.sleep(5)
continue
if res.get("status") == 1:
token = res["request"]
print("token:", token[:60], "…")
break
raise RuntimeError(res)
CAPCHA_NOT_READY yanıtı normaldir — çözüm hâlâ sürüyor demektir. Dönen token genellikle 03AGdBq25... gibi uzun, kodlanmış bir karakter dizisidir.
Adım 4: token'ı forma enjekte edin
Token'ı almak son adım değildir; sayfanın beklediği yere ulaştırmanız gerekir. En yaygın yol, gizli g-recaptcha-response textarea'sını doldurmaktır:
document.querySelector('textarea[name="g-recaptcha-response"]').value = token;
document.querySelector("form").submit();
Selenium ile aynı işlem:
driver.execute_script(
"document.querySelector('[name=\"g-recaptcha-response\"]').value = arguments[0];",
token,
)
driver.find_element(By.CSS_SELECTOR, "form").submit()
Playwright kullanıyorsanız:
await page.evaluate((t) => {
document.querySelector('[name="g-recaptcha-response"]').value = t;
}, token);
await page.click('button[type="submit"]');
Widget'ta bir data-callback tanımlıysa, textarea'yı doldurmak yetmez — o callback fonksiyonunu da token ile çağırmanız gerekir:
const callback = document.querySelector(".g-recaptcha").dataset.callback;
if (callback && window[callback]) window[callback](token);
Tam çalışan örnek (Python)
Yukarıdaki adımları tek bir yeniden kullanılabilir fonksiyonda birleştiren, zaman aşımı korumalı sürüm:
import time
import requests
API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://staging.example.com/qa-login"
def solve_recaptcha_v2():
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": SITEKEY, "pageurl": PAGEURL, "json": 1,
}).json()
if submit["status"] != 1:
raise RuntimeError(submit)
task_id = submit["request"]
time.sleep(20)
for _ in range(40):
res = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1,
}).json()
if res.get("request") == "CAPCHA_NOT_READY":
time.sleep(5)
continue
if res.get("status") == 1:
return res["request"]
raise RuntimeError(res)
raise TimeoutError("solve timed out")
if __name__ == "__main__":
token = solve_recaptcha_v2()
print("token:", token[:80])
Bu kalıbın en pratik avantajı şudur: in.php'ye gönder, res.php'yi sorgula akışı CaptchaAI'nin desteklediği her tür için aynıdır. Bir kez öğrenince aynı yapıyı Cloudflare Turnstile çözümüne ve diğer türlere taşıyabilirsiniz.
reCAPTCHA v2 çözerken sık karşılaşılan hatalar
| Hata | Sebep | Yapılacak |
|---|---|---|
ERROR_GOOGLEKEY |
sitekey boş veya geçersiz | sitekey'i doğru sayfadan yeniden çıkarın |
ERROR_PAGEURL |
pageurl eksik |
Tam URL'yi https:// şemasıyla gönderin |
ERROR_ZERO_BALANCE |
Boş thread yok | Bakiye yükleyin ya da bir thread boşalana kadar bekleyin |
ERROR_CAPTCHA_UNSOLVABLE |
Site doğrulamayı sertleştirdi | Birkaç saniye sonra tekrar deneyin; bkz. reCAPTCHA v2 çözümünde sık görülen hatalar |
| Site token'ı reddediyor | Token'ın süresi dolmuş | Aldıktan sonra ~110 saniye içinde kullanın |
Token dönüyor ama çalışmıyorsa
Geçerli bir token almanıza rağmen sayfa hâlâ engelliyorsa, sorun neredeyse her zaman API'de değil enjeksiyon aşamasındadır:
- Formun kendi handler'ı var — textarea'yı doldurmak yetmiyorsa, widget'taki
data-callbackfonksiyonunu bulup token ile çağırın. - Oturum tutarlı değil — token'ı, çözüm başlatıldığında aktif olan aynı çerezler ve
User-Agentile gönderin; sunucu isteği farklı bir oturumla eşleştiremezse reddeder. - IP eşleşmesi gerekiyor — gönderiye
proxyveproxytypeparametrelerini ekleyerek çözümün belirli bir IP üzerinden yapılmasını sağlayabilirsiniz.
reCAPTCHA v2 için neden CaptchaAI
Türk geliştiriciler USD ile ödeme yapar ve TL oynaklığı karşısında öngörülebilir aylık maliyet gerçek bir avantajdır. CaptchaAI thread tabanlı planlar sunar: en düşük plan BASIC ($15/ay, 5 thread) olmak üzere her planda thread başına sınırsız çözüm vardır — çözüm başına ücret veya günlük kota yoktur. reCAPTCHA v2 desteklenen türler arasındadır ve yüksek başarı oranıyla, genellikle 60 saniyenin altında çözülür. Aynı in.php/res.php kalıbı reCAPTCHA v3, Turnstile ve GeeTest v3 için de geçerli olduğundan, entegrasyonu bir kez kurup tüm iş akışınıza yayabilirsiniz.
Sık sorulan sorular
reCAPTCHA v2 çözümü ne kadar sürer?
Genellikle 60 saniyenin altında ve yüksek başarı oranıyla tamamlanır. İlk sorgudan önce 20 saniye bekleyin, sonra her 5 saniyede bir sonucu sorgulayın.
reCAPTCHA v2 token'ı ne kadar süre geçerli kalır?
Token yaklaşık iki dakika sonra geçersiz olur. Bu yüzden aldığınız token'ı gecikmeden, tercihen ~110 saniye içinde forma enjekte edin; beklerseniz site token'ı reddeder.
CaptchaAI hangi planlarla reCAPTCHA v2 çözer?
Tüm thread tabanlı planlar reCAPTCHA v2 dahil desteklenen türleri çözer. BASIC ($15/ay, 5 thread) planından başlar ve her planda thread başına sınırsız çözüm bulunur; eşzamanlı thread sayısı arttıkça daha fazla görevi paralel işlersiniz.
Token dönüyor ama form neden reddediyor?
Bu çoğunlukla enjeksiyon sorunudur, API sorunu değil. Önce sayfanın g-recaptcha-response alanı mı yoksa bir callback mi beklediğini doğrulayın, ardından token'ı çözümü başlatan oturumla aynı çerez ve User-Agent ile gönderin.