Troubleshooting

reCAPTCHA v3 Neden Düşük Puan Getiriyor?

Formunuz hata vermiyor, log'da istisna yok, ama gönderim sessizce reddediliyor — bu tablonun neredeyse tek açıklaması reCAPTCHA v3 puanının sitenin eşiğinin altında kalmasıdır. v3 ekranda hiçbir CAPTCHA doğrulaması göstermez; 0,0 (bot) ile 1,0 (insan) arasında bir sayı üretir ve kararı tamamen siteye bırakır. Yani "bir şey kırıldı" diye kod tarafında aradığınız hata çoğu zaman orada değildir.

Puanı sizin kodunuz değil, Google'ın risk modeli belirler: isteğin çıktığı IP, profilin oturum geçmişi, token'a gömülü action değeri ve token'ın ne kadar bekletildiği birlikte okunur. Aşağıda önce nedenleri etkisi en yüksek olandan başlayarak eleyeceğiz, sonra sinyal tablosuna, sahadan bir senaryoya ve CaptchaAI ile token üretimine geçeceğiz.


Düşük reCAPTCHA v3 puanının yedi tipik nedeni

Sırayı bozmadan ilerleyin: üstteki maddeler puanı en çok hareket ettirenlerdir ve düzeltmeler birikimli çalışır.

1. IP itibarı düşük

Açık ara en sık neden. Bulut sağlayıcılarının IP blokları Google tarafında veri merkezi olarak tanınır ve bu bloklardan gelen her istek baştan düşük puanla başlar. Paylaşımlı ucuz proxy havuzları da aynı sonucu verir.

Düzeltme:

  • Trafiği kendi kontrol ettiğiniz çıkış noktalarına taşıyın.
  • İstekleri tek bir adreste yığmak yerine birden fazla çıkışa dağıtın.
  • Ücretsiz proxy listelerinden uzak durun.

2. action değeri sayfadakiyle eşleşmiyor

Her grecaptcha.execute() çağrısı bir eylem dizisi taşır ve bu dize token'ın içine gömülür. Yanlış eylem gönderdiğinizde token yine üretilir — hata almazsınız — ama sunucudaki doğrulama gömülü eylemin beklenenle eşleşmediğini görüp isteği düşürür. login yerine submit göndermek tek başına akışı bitirmeye yeter.

Düzeltme: Değeri sayfa kaynağındaki çağrıdan birebir okuyun ve API isteğinize aynen geçirin.

3. Token 2 dakikadan fazla bekletildi

reCAPTCHA v3 token'larının geçerlilik süresi 2 dakikadır. Token'ı sayfa yüklenirken üretip form gönderiminden sonra kullanan akışlar bu süreyi kolayca aşar; kuyruk kullanan mimarilerde bekleme süresi tek başına sınırı geçebilir.

Düzeltme:

  • Token'ı gönderimden hemen önce isteyin, sayfa açılışında değil.
  • Kuyruklu tasarımlarda token'ı kuyruğa girerken değil, kuyruktan çıkan worker'a ürettirin.

4. Tarayıcı neredeyse hiç davranış sinyali göndermiyor

Varsayılan yapılandırmayla koşan headless tarayıcılarda fare hareketi, kaydırma geçmişi ve çerez yoktur. Bu boşluğun kendisi bir işarettir: model sinyalin hiç olmamasını da düşük puanla karşılar.

Düzeltme:

  • Gerçekçi bir görünüm boyutu ve kullanıcı aracısı ayarlayın.
  • İşlemi tetiklemeden önce sayfada birkaç saniye kalın.
  • En az bir kaydırma hareketi bırakın.

5. Profilde Google çerezi yok

Aktif Google oturumu taşıyan tarayıcılar (NID, SID, HSID çerezleri) daha yüksek puan alma eğilimindedir. Her koşuda sıfırdan açılan temiz profillerde bu geçmiş hiç oluşmaz.

Düzeltme: Kalıcı bir tarayıcı profili kullanın ve hedef sayfaya gitmeden önce profilin normal bir tarama geçmişi biriktirmesine izin verin.

6. Aynı oturumdan art arda çok fazla istek

Aynı oturumdan hızlı tekrarlanan grecaptcha.execute() çağrılarında her yeni çağrı bir öncekinden düşük puan alır. Puanın zamanla düştüğü yolundaki şikâyetlerin arkasında genellikle bu vardır.

Düzeltme: Çözümler arasına en az 15–30 saniye gecikme koyun ve oturumları dönüşümlü kullanın.

7. Eşiği yanlış varsayıyorsunuz

Bazen sorun puanda değil beklentidedir. Site 0,7 eşiği kullanıyorsa 0,5'lik bir puan da "düşük" görünür — oysa akış tasarım gereği reddediliyordur. Sayfadan v3 yerine v2 sitekey'ini çıkarmış olma ihtimalini de bu maddede eleyin.

Düzeltme: Doğrulama yanıtını loglayın; score alanını görmeden eşik tahmin etmek zaman kaybıdır.


Puanı oluşturan sinyaller

Nedenleri elerken hangi kategoriye dokunduğunuzu bilmek işe yarar. Google puan atamadan önce şunları birlikte okur:

Sinyal kategorisi Neye bakılıyor
IP itibarı Veri merkezi mi, son kullanıcı bağlantısı mı; kötüye kullanım kaydı
Çerez ve oturum Google çerezleri, profilin tarama geçmişi
Tarayıcı test profil yapılandırması Canvas, WebGL, yazı tipleri, eklentiler
Fare ve kaydırma İmleç yolu, hız, duraklamalar, sayfa kaydırma
Yazma temposu Tuş vuruşu zamanlaması ve ritmi
Sayfa etkileşim süresi İşlem tetiklenmeden önce sayfada geçen süre
action eşleşmesi Token'a gömülü eylem, sitenin beklediğiyle aynı mı

Hiçbir kategori tek başına belirleyici değildir; puan hepsinin bileşimidir.


Sahadan bir örnek: gece koşan ödeme adımı süiti

İstanbul'da çalışan bir e-ticaret ekibinin ödeme adımı QA otomasyonunu düşünün. Testler gece Europe/Istanbul saatiyle koşuyor; tr-TR locale ile açılan headless Chrome, tek bir bulut sunucusunda her koşuda 200 sipariş akışını deniyor. İlk hafta sorunsuz geçiyor, ikinci hafta koşuların tamamı doğrulama adımında düşüyor.

Sırayı uygularsanız neden hemen görünür: tek bulut IP'si, her seferinde sıfırlanan tek profil ve aralıksız 200 istek — yani 1, 5 ve 6 numaralı maddeler aynı anda. Düzeltme sırası da aynıdır: önce çıkış noktalarını dağıtın, sonra profilleri kalıcı hale getirin, en son istekler arasına gecikme koyun. Bunları ters sırada denerseniz her adımda "hiçbir şey değişmedi" sonucunu alırsınız.

Maliyet tarafı Türkiye'deki ekipler için ayrıca önemli: kur oynaklığı nedeniyle öngörülebilir aylık USD gider tek başına bir avantajdır. CaptchaAI planları thread tabanlıdır ve fiyatlar USD üzerinden ilerler; BASIC ($15/ay, 5 thread) küçük bir regresyon paketine yeterken, gece paralel koşan bir süit için ADVANCE ($90/ay, 50 thread) daha uygun düşer.

Son bir hatırlatma: test verisi gerçek kullanıcı bilgisi içeriyorsa KVKK kapsamına girer. QA akışlarında sahte ama geçerli biçimli veri (+90 formatlı numaralar) kullanın.


CaptchaAI ile reCAPTCHA v3 token'ı üretme

CaptchaAI, reCAPTCHA v3'ü gerçek tarayıcı ortamlarında çözer ve genellikle 0,3 civarında puanlanan token'lar üretir. Eşiği 0,3 veya altında olan sayfaların çoğu bu token'ı kabul eder; daha yüksek eşiklerde yukarıdaki sinyal düzeltmeleri hâlâ gereklidir. Puanı Google belirlediği için hiçbir servis belirli bir puan sözü veremez — bu kısıt sektörün tamamı için geçerlidir.

Görevi in.php uç noktasına gönderin, sonucu res.php üzerinden sorgulayın:

import requests
import time

response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "version": "v3",
    "googlekey": "SITE_KEY",
    "action": "login",
    "pageurl": "https://staging.example.com/qa-login",
    "json": 1
})

task_id = response.json()["request"]

for _ in range(30):
    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"]
        print(f"Token received: {token[:50]}...")
        break

Node.js tarafında aynı akış:

const axios = require('axios');

async function solveV3(sitekey, pageurl, action) {
  const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
    params: {
      key: 'YOUR_API_KEY', method: 'userrecaptcha', version: 'v3',
      googlekey: sitekey, action, pageurl, json: 1
    }
  });

  const taskId = data.request;
  for (let i = 0; i < 30; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await axios.get('https://ocr.captchaai.com/res.php', {
      params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
    });
    if (res.data.status === 1) return res.data.request;
  }
  throw new Error('Timeout');
}

Hızlı teşhis kontrol listesi

Bir koşu düştüğünde listeyi yukarıdan aşağıya uygulayın; ilk üç satır vakaların çoğunu kapatır.

Kontrol Eylem
action doğru mu? Sayfa kaynağındaki grecaptcha.execute() çağrısıyla karşılaştırın
Token taze mi? Üretimden sonraki 2 dakika içinde gönderin
Sitekey doğru mu? v2 değil, v3 sitekey'ini çıkardığınızı doğrulayın
IP türü? Kendi çıkış noktalarınıza geçin, tek adreste yığılmayın
İstek hızı? Çözümler arasına 15–30 saniye gecikme koyun
Google çerezleri? Kalıcı profil kullanın, oturum geçmişini koruyun
Eşik biliniyor mu? Sunucu yanıtındaki score alanını loglayın

Sık sorulan sorular

Puanın düştüğünü nasıl anlarım, sayfada bir uyarı çıkmıyor?

Çıkmaz. v3 sessizdir; tek kanıt sunucu tarafındaki doğrulama yanıtıdır. score alanını loglamaya başlamadan önce yaptığınız her tahmin körlemedir.

Hangi puan "yeterli" sayılır?

Eşiği site belirler, tek bir doğru sayı yoktur. Düşük riskli sayfalarda 0,3, ödeme gibi kritik işlemlerde 0,7 yaygındır; varsayılan olarak 0,5 de sık görülür. Kendi hedef sitenizin değerini yanıtı loglayarak ölçün.

Düzeltmeleri uyguladım ama puan hemen yükselmedi, normal mi?

Normal. Düzeltmeler birikimli çalışır; IP itibarı gibi kalemler birkaç gün içinde oturur. Tek seferde tek değişiklik yapıp score alanını loglayarak ilerleyin.

v3 puanı düşükken sitenin gösterdiği v2 doğrulamasını çözmek daha mı mantıklı?

Çoğu zaman evet. Birçok site düşük v3 puanında v2 doğrulaması gösterir ve v2 ikili sonuç ürettiği için akış öngörülebilir hale gelir. Puan takip etmek yerine net bir kabul/ret sinyali alırsınız.

Aynı sorun Turnstile veya GeeTest v3 tarafında da yaşanır mı?

Hayır, çünkü ikisi de puan üretmez. Cloudflare Turnstile ve GeeTest v3 doğrulanabilir token döndürür; oralarda sorun giderme token tazeliği ve doğru sitekey etrafında döner.


İlgili kılavuzlar

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