API Tutorials

API ile reCAPTCHA v2 nasıl çözülür: adım adım rehber

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'sindehttps://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=1 ekleyin; 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-callback fonksiyonunu bulup token ile çağırın.
  • Oturum tutarlı değil — token'ı, çözüm başlatıldığında aktif olan aynı çerezler ve User-Agent ile gönderin; sunucu isteği farklı bir oturumla eşleştiremezse reddeder.
  • IP eşleşmesi gerekiyor — gönderiye proxy ve proxytype parametrelerini 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.


Sonraki adımlar

Bu makale için yorumlar devre dışı bırakılmıştır.