API Eğitimleri

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

reCAPTCHA v2; giriş, kayıt, ödeme ve form gönderimi akışlarında hâlâ en sık karşılaşılan kontrol noktalarından biri. Otomasyonunuz bir reCAPTCHA v2 onay kutusu veya görsel meydan okumasına çarpıyorsa API ile dört adımda çözebilirsiniz: sayfadan sitekey ve pageurl'yi çıkarın, CaptchaAI reCAPTCHA v2 çözücüsüne gönderin, sonucu bekleyin ve dönen token'ı korumalı akışa enjekte edin.

Bu rehber teori değil, çalışan bir entegrasyon arayan geliştiriciler için yazıldı.

Hangi reCAPTCHA sürümüyle uğraştığınızdan emin değil misiniz? Önce reCAPTCHA Sürümünü Belirleme okuyun.


Başlamadan önce gerekenler

Gereksinim Detay
CaptchaAI API anahtarı captchaai.com/api.php üzerinden alın. 32 karakter.
Hedef sayfa URL'si reCAPTCHA v2 widget'ının yüklendiği tam URL.
sitekey O sayfadaki widget örneğine bağlı ortak anahtar.
HTTP istemcisi requests, axios, fetch, curl — hangisi olursa.
Aktif thread'ler Hesabınızda boş çözüm thread'i olmalı.

Adım 1: sitekey ve pageurl'yi çıkarın

pageurl, reCAPTCHA'nın yer aldığı sayfanın tam URL'sidir. Mutlaka https:// ile gönderin.

sitekey için üç yol var:

1. HTML'de<div class="g-recaptcha" data-sitekey="..."> 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-&...k= parametresi sitekey'dir.

3. Ağ trafiğinde — DevTools → Network'te recaptcha ile filtreleyin; herhangi bir istekte k parametresini bulursunuz.


Adım 2: görevi gönderin

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)

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? Payload'a invisible=1 ekleyin. Ayrıntı için Görünmez reCAPTCHA Nasıl Çalışır.


Adım 3: sonucu sorgulayın

reCAPTCHA v2 genellikle 15–60 saniye sürer. 20 saniye bekleyin, sonra her 5 saniyede sorgulayın.

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)

Dönen token genelde 03AGdBq25... ile başlayan uzun bir karakter dizisidir.


Adım 4: token'ı sayfaya enjekte edin

Yöntem siteye göre değişir. En yaygını g-recaptcha-response textarea'sıdır:

document.querySelector('textarea[name="g-recaptcha-response"]').value = token;
document.querySelector("form").submit();

Selenium:

driver.execute_script(
    "document.querySelector('[name=\"g-recaptcha-response\"]').value = arguments[0];",
    token,
)
driver.find_element(By.CSS_SELECTOR, "form").submit()

Playwright:

await page.evaluate((t) => {
  document.querySelector('[name="g-recaptcha-response"]').value = t;
}, token);
await page.click('button[type="submit"]');

Widget'ta data-callback varsa o fonksiyonu da çağırın:

const callback = document.querySelector(".g-recaptcha").dataset.callback;
if (callback && window[callback]) window[callback](token);

Tam çalışan örnek (Python)

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])

Sık görülen hatalar ve çözümleri

Hata Sebep Yapılacak
ERROR_GOOGLEKEY sitekey boş veya geçersiz sitekey'i geçerli sayfadan tekrar çıkarın
ERROR_PAGEURL pageurl eksik Tam URL'yi şemayla gönderin
ERROR_ZERO_BALANCE Thread yok Bakiye yükleyin veya bekleyin
ERROR_CAPTCHA_UNSOLVABLE Site testi 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 geçmiş Aldıktan sonra ~110 saniye içinde kullanın

Bir şey çalışmıyorsa

  • Token dönüyor ama site hâlâ engelliyor — formun kendi handler'ı var. Doğrudan textarea doldurmak yerine callback'i bulup çağırın.
  • Aynı parmak izini korumak gerek — token alındığında aktif olan aynı çerez ve User-Agent ile gönderin.
  • Proxy bağımlı reCAPTCHA — gönderiye proxy ve proxytype parametrelerini ekleyin; çözücü kendi IP havuzunuzu kullanır.

Sonraki adımlar

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