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'sinde — https://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=1ekleyin. 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-Agentile gönderin. - Proxy bağımlı reCAPTCHA — gönderiye
proxyveproxytypeparametrelerini ekleyin; çözücü kendi IP havuzunuzu kullanır.