API Tutorials

API ile görünmez reCAPTCHA nasıl çözülür?

Görünmez reCAPTCHA'yı API ile çözmek, standart v2 çözmekten yalnızca iki noktada ayrılır: isteğinize invisible=1 eklersiniz ve dönen token'ı gizli bir form alanına değil, sayfadaki callback fonksiyonuna verirsiniz. Gerisi, CaptchaAI'nin tanıdık in.php / res.php akışıdır — sitekey'i gönderir, sonucu sorgular, token'ı alırsınız.

En kritik fark token'ı nasıl enjekte ettiğinizdir. Onay kutulu v2'nin aksine görünmez uygulamaların çoğu, gizli g-recaptcha-response alanını doldurmak yerine bir callback (geri çağırma) fonksiyonu bekler; bu fonksiyonu bulup token ile çağırmadığınızda form ilerlemez. Bu rehber, görünmez widget'ı tespit etmekten token'ı doğru yere enjekte etmeye kadar dört adımı Python ve Node.js örnekleriyle gösterir.

Görünmez mi yoksa standart v2 mi olduğundan emin değilseniz: tespit ipuçları için reCAPTCHA v2 ile görünmez sürümün farkları rehberine göz atın.


Görünmez ve standart v2: temel farklar

İki tür aynı userrecaptcha metodunu paylaşır, ancak entegrasyon detayları farklıdır. Kod yazmaya başlamadan önce şu dört noktayı bilin:

  • Onay kutusu yoktur. Kullanıcı bir düğmeye bastığında veya formu gönderdiğinde doğrulama arka planda tetiklenir; ekranda tıklanacak bir kutu görünmez.
  • invisible=1 zorunludur. Bu parametre olmadan CaptchaAI görevi standart v2 olarak ele alır ve dönen token hedef site tarafından reddedilebilir.
  • Token callback ile enjekte edilir. Uygulamaların çoğu gizli alanı doldurmak yerine, token'ı bir JavaScript callback fonksiyonuna geçirmenizi bekler.
  • Akış aynı kalır. Görev gönderme, sorgulama ve token alma adımları v2 ile birebir aynıdır — yalnızca son enjeksiyon adımı değişir.

Görünmez reCAPTCHA'yı nerede görürsünüz

Görünmez reCAPTCHA çoğunlukla onay kutusu olmayan yerlerde çalışır: bir e-ticaret sitesinin üyelik kayıt formu, giriş ekranı veya "Gönder" düğmesi. Türkiye'deki ekiplerin sık karşılaştığı bir senaryo, bir ödeme ya da kayıt akışının uçtan uca QA otomasyonudur — kullanıcı düğmeye bastığında reCAPTCHA arka planda tetiklenir ve sayfa yalnızca token doğrulandıktan sonra devam eder. Test ortamınızda bu akışı otomatikleştirirken CAPTCHA adımı işi durdurur; API ile çözüm tam bu noktada devreye girer.

Uyarı: kazıma veya otomasyon iş akışlarında topladığınız kişisel veriler KVKK kapsamına girebilir. CaptchaAI'yi yetkili olduğunuz QA ve veri toplama senaryolarında kullanın; başkasına ait, kimlik doğrulamalı verileri hedef almayın.


Başlamadan önce neye ihtiyacınız var

Entegrasyona geçmeden önce elinizde şu dört parçanın hazır olması gerekir:

Gereksinim Ayrıntı
CaptchaAI API anahtarı captchaai.com/api.php
Sitekey Widget veya düğmedeki data-sitekey değerinden
Sayfa URL'si Görünmez CAPTCHA'nın çalıştığı tam URL
Tarayıcı aracı Callback'i çalıştırmak için Selenium/Puppeteer

Adım 1: Görünmez reCAPTCHA'yı tespit edin

Doğru parametreleri göndermek için önce widget'ın gerçekten görünmez olduğunu doğrulayın. Sayfa HTML'sinde şu üç kalıptan birini arayın:

<!-- Option 1: div with data-size="invisible" -->
<div class="g-recaptcha" data-sitekey="6LdKlZEU..." data-size="invisible" data-callback="onSubmit"></div>

<!-- Option 2: button with data-sitekey (invisible by default) -->
<button data-sitekey="6LdKlZEU..." data-callback="onSubmit">Submit</button>

<!-- Option 3: programmatic execution -->
<script>
  grecaptcha.execute('6LdKlZEU...', {action: 'submit'});
</script>

data-size="invisible" içeren bir div, data-sitekey taşıyan bir düğme veya kapsayıcı olmadan çağrılan grecaptcha.execute() görüyorsanız, karşınızdaki görünmez reCAPTCHA'dır. Aynı HTML'deki data-sitekey değerini not alın; bir sonraki adımda googlekey olarak göndereceksiniz.

Adım 2: Görevi CaptchaAI'ye gönderin

Görünmez akışı standart v2'den ayıran anahtar invisible=1 parametresidir; sitekey ve sayfa URL'siyle birlikte in.php uç noktasına gönderin. Yanıttaki request alanı, sonucu sorgularken kullanacağınız görev kimliğini (task_id) verir.

import requests

response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "6LdKlZEUAAAAAPoxm...",
    "pageurl": "https://example.com/signup",
    "invisible": 1,
    "json": 1
})

task_id = response.json()["request"]
const params = new URLSearchParams({
  key: "YOUR_API_KEY", method: "userrecaptcha",
  googlekey: "6LdKlZEUAAAAAPoxm...",
  pageurl: "https://example.com/signup",
  invisible: 1, json: 1,
});
const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const { request: taskId } = await res.json();

Adım 3: Sonucu sorgulayın

Görev kuyruğa alındıktan sonra sonucu hemen dönmez; res.php uç noktasını periyodik olarak sorgulamanız gerekir. status alanı 1 olduğunda token hazırdır. Aşağıdaki döngü her 5 saniyede bir kontrol eder ve token hazır değilse sessizce yeniden dener.

import time

for _ in range(40):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id, "json": 1
    }).json()
    if result.get("status") == 1:
        token = result["request"]
        break
    if result.get("request") != "CAPCHA_NOT_READY":
        raise RuntimeError(f"Error: {result['request']}")

Adım 4: Token'ı callback ile enjekte edin

İşin can alıcı adımı budur. Görünmez reCAPTCHA yalnızca gizli bir alan değeri değil, çoğu zaman bir callback fonksiyonu bekler. Aşağıdaki kod iki yolu birden ele alır:

  • Callback bulunursa: window['callbackAdı'](token) çağrısıyla token'ı doğrudan fonksiyona geçirir ve akış kaldığı yerden devam eder.
  • Callback yoksa: gizli g-recaptcha-response alanını doldurur ve formu gönderir — bazı uygulamaların beklediği yedek yöntem budur.
# Selenium example
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com/signup")

# Find the callback name
callback = driver.execute_script("""
    var el = document.querySelector('[data-callback]');
    if (el) return el.getAttribute('data-callback');
    var btn = document.querySelector('[data-sitekey]');
    if (btn) return btn.getAttribute('data-callback');
    return null;
""")

# Execute the callback with the token
if callback:
    driver.execute_script(f"window['{callback}']('{token}');")
else:
    # Fallback: fill hidden field and submit
    driver.execute_script(f"""
        document.getElementById('g-recaptcha-response').innerHTML = '{token}';
        document.querySelector('form').submit();
    """)
// Puppeteer example
await page.evaluate((token) => {
  const el = document.querySelector('[data-callback]') || document.querySelector('[data-sitekey]');
  const callbackName = el?.getAttribute('data-callback');

  if (callbackName && window[callbackName]) {
    window[callbackName](token);
  } else {
    document.getElementById('g-recaptcha-response').innerHTML = token;
    document.querySelector('form').submit();
  }
}, token);

Sık karşılaşılan hatalar ve çözümleri

Görünmez reCAPTCHA entegrasyonunda çoğu sorun aynı birkaç nedene dayanır. En yaygın hatalar ve hızlı çözümleri:

Sorun Olası neden Çözüm
Token hedef site tarafından reddedildi İstekte invisible=1 eksik Parametreyi ekleyin ve görevi yeniden gönderin
ERROR_WRONG_GOOGLEKEY Yanlış veya eksik sitekey data-sitekey değerini sayfadan yeniden okuyun
Form ilerlemiyor Callback çağrılmadı ya da adı yanlış Callback adını doğrulayın, token ile çağırın
Zaman aşımı Sorgulama aralığı çok kısa Döngü sayısını veya bekleme süresini artırın

Sorun sürerse, gerekli tüm form alanlarının callback tetiklenmeden önce doldurulduğundan emin olun; görünmez uygulamalar çoğu zaman eksik alanlarda formu göndermez.


Dört adımı tek fonksiyonda birleştirin

Gönderme, sorgulama ve hata kontrolünü tek çağrıda toplayan bu fonksiyon, üretimde kullanabileceğiniz iyi bir başlangıç noktasıdır. Token'ı döndürür; herhangi bir adım başarısız olursa açık bir hata fırlatır:

import requests
import time

def solve_invisible_recaptcha(api_key, sitekey, page_url):
    submit = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": api_key, "method": "userrecaptcha", "googlekey": sitekey,
        "pageurl": page_url, "invisible": 1, "json": 1
    }).json()

    if submit.get("status") != 1:
        raise RuntimeError(f"Submit error: {submit.get('request')}")

    task_id = submit["request"]

    for _ in range(40):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get", "id": task_id, "json": 1
        }).json()
        if result.get("status") == 1:
            return result["request"]
        if result.get("request") != "CAPCHA_NOT_READY":
            raise RuntimeError(f"Solve error: {result.get('request')}")

    raise TimeoutError("Timed out")

token = solve_invisible_recaptcha("YOUR_API_KEY", "6LdKlZEU...", "https://example.com/signup")

Üretimde dikkat edilmesi gerekenler

Gerçek iş yükünde sabit time.sleep yerine üstel geri çekilme (exponential backoff) uygulayın ve her isteği bir zaman aşımıyla sarın; böylece geçici ağ hataları tüm akışı durdurmaz.


Çalıştırılabilir örnek proje

Ortam kurulumu, sorgulama, yeniden denemeler ve hata işleme dahil eksiksiz bir proje mi arıyorsunuz?

Çalıştırılabilir örneğin tamamını GitHub'da inceleyin →


Sık sorulan sorular

Görünmez reCAPTCHA entegrasyonunda geliştiricilerin en çok merak ettiği noktalar:

Görünmez reCAPTCHA ile reCAPTCHA v3 arasındaki fark nedir?

İkisi de kullanıcıya onay kutusu göstermez ama farklıdır. Görünmez reCAPTCHA v2 ailesindendir; gerektiğinde bir görsel doğrulamaya düşebilir ve invisible=1 ile çözülür. reCAPTCHA v3 ise tamamen puana dayalıdır ve min_score gibi ek parametrelerle çalışır. Sayfanızın hangisini kullandığını data-size ve script çağrılarından anlayabilirsiniz.

Görünmez reCAPTCHA çözümü hangi planla ve kaç thread ile çalışır?

Görünmez reCAPTCHA, diğer reCAPTCHA türleriyle aynı userrecaptcha metodunu kullanır; tür başına ek ücret yoktur. BASIC ($15/ay, 5 thread) dahil tüm planlar geçerlidir. Faturalandırma çözüm başına değil eşzamanlı thread başınadır, yani thread başına sınırsız çözüm yaparsınız; hacim arttıkça daha yüksek bir plana geçmeniz yeterlidir.

Görünmez reCAPTCHA çözümü ortalama ne kadar sürer?

Süre reCAPTCHA'nın anlık zorluğuna bağlıdır. Yukarıdaki döngü res.php'yi her 5 saniyede bir sorgular ve token hazır olur olmaz döner. Kod yolunu değiştirmeden yalnızca sorgulama aralığını veya döngü sayısını ayarlayarak zaman aşımı davranışını kontrol edebilirsiniz.

Callback fonksiyonunu bulamazsam nasıl ilerlerim?

g-recaptcha-response gizli alanını doldurup formu göndermeyi deneyin — bazı görünmez uygulamalar bu yönteme geri döner. İşe yaramazsa sayfa JavaScript'inde reCAPTCHA yanıtını işleyen fonksiyonları arayın; genellikle grecaptcha nesnesini dinleyen bir callback vardır.

Görünmez reCAPTCHA'nın Enterprise sürümü destekleniyor mu?

Evet. İsteğinize invisible=1 ile birlikte enterprise=1 parametresini de ekleyin; akışın geri kalanı aynı kalır. Enterprise widget'larında data-sitekey yerine bazen farklı bir öznitelik kullanıldığını unutmayın.


Kısa özet

Görünmez reCAPTCHA'yı API ile çözmenin dört adımı şuna indirgenir:

  1. Widget'ı tespit edin ve data-sitekey değerini alın.
  2. invisible=1 ile görevi in.php uç noktasına gönderin.
  3. res.php'yi sorgulayıp hazır token'ı alın.
  4. Token'ı callback fonksiyonuyla sayfaya enjekte edin.

Görünmez reCAPTCHA'yı çözmeye başlayın

API anahtarınızı captchaai.com/api.php adresinden alın. Mevcut v2 çözüm kodunuza invisible=1 ekleyin ve yukarıdaki callback enjeksiyon modelini uygulayın — birkaç satır değişiklikle görünmez akış çalışır hâle gelir.


İlgili kılavuzlar

Görünmez reCAPTCHA'yı derinlemesine anlamak ve komşu sorunları çözmek için:

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