Sorun Giderme

Yaygın reCAPTCHA v2 Hataları ve Düzeltmeleri Çözme

Çoğu reCAPTCHA v2 hatası üç gruba ayrılır: istek aşaması hataları (API'ye gönderilen yanlış parametreler), sonuç aşaması sorunları (yoklama sorunları veya çözülemeyen görevler) ve hedef sayfa retleri (API geçerli bir belirteç döndürür ancak sayfa bunu yok sayar). En büyük suçlular hemen hemen her zaman aynıdır: yanlış googlekey, yanlış pageurl, eksik geri arama uygulaması veya süresi dolmuş jetonlar.

Bu kılavuz, her biri için kesin düzeltmeyi içeren tüm yaygın arıza modellerini açıklamaktadır. reCAPTCHA v2 çözümünde yeniyseniz, okuyunAPI Kullanarak reCAPTCHA v2 Nasıl Çözülür?Birinci.


reCAPTCHA v2'nin en büyük dört arıza noktası

Bireysel hata kodlarına girmeden önce bunları kontrol edin; bunlar arızaların %80'ini kapsar.

1. Yanlış veya eksik googlekey

googlekey (sitekey), reCAPTCHA widget'ındaki data-sitekey niteliğinden veya bağlantı URL'sindeki k parametresinden gelir. Bu değer yanlışsa, boşsa veya farklı bir sayfadan kopyalanmışsa API, ERROR_GOOGLEKEY veya ERROR_WRONG_GOOGLEKEY ile görevi hemen reddeder.

Doğru site anahtarı nasıl bulunur:

# Look for data-sitekey in the page HTML
# <div class="g-recaptcha" data-sitekey="6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-"></div>

# Or find it in the anchor URL
# https://www.google.com/recaptcha/api2/anchor?k=6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-

2. Yanlış pageurl

pageurl, reCAPTCHA widget'ının yüklendiği tam URL olmalıdır. Widget farklı bir alanda barındırılan bir iframe'in içindeyse üst sayfa URL'sine değil iframe URL'sine ihtiyacınız vardır. Yanlış URL'nin gönderilmesi ERROR_PAGEURL veya ERROR_BAD_TOKEN_OR_PAGEURL'ye neden olur.

3. Geri arama yürütülmedi

Bazı sayfalar gizli g-recaptcha-response alanı yerine JavaScript geri çağırma işlevini kullanır. Belirteci gizli alana enjekte ederseniz ancak sayfa bir geri arama bekliyorsa form hiçbir zaman gönderilmez. Widget'ta data-callback olup olmadığını veya grecaptcha.render()'de bir callback özelliğini kontrol edin.

4. Tokenın süresi dolmuş veya yeniden kullanılmış

reCAPTCHA jetonları yalnızca tek kullanım için geçerlidir ve yaklaşık 2 dakika sonra sona erer. Otomasyonunuz belirtecin alınması ile formun gönderilmesi arasında çok uzun zaman alırsa veya bir belirteci yeniden kullanıyorsa, hedef sayfa bunu sessizce reddeder.


İstek aşaması hataları (in.php)

Bu hatalar CAPTCHA görevini https://ocr.captchaai.com/in.php'ye gönderdiğinizde ortaya çıkar.

Hata Kodu Sebep Düzeltme
ERROR_WRONG_USER_KEY API anahtarı biçimi geçersiz (32 karakter değil) API anahtarınızı şu adreste kontrol edin:captchaai.com/api.php
ERROR_KEY_DOES_NOT_EXIST API anahtarı sistemde mevcut değil Anahtarın tamamını fazladan boşluk bırakmadan kopyaladığınızı doğrulayın
ERROR_ZERO_BALANCE Hesap bakiyesi sıfır Hesabınızı doldurun veya aktif konu sayısını kontrol edin
ERROR_PAGEURL pageurl parametresi eksik reCAPTCHA widget'ının göründüğü tam URL'yi ekleyin
ERROR_GOOGLEKEY googlekey hatalı biçimlendirilmiş veya boş Sayfadan doğru site anahtarını çıkarın
ERROR_WRONG_GOOGLEKEY googlekey parametresi tamamen eksik API isteğinize googlekey ekleyin
ERROR_BAD_TOKEN_OR_PAGEURL googlekey + pageurl çifti geçersiz Widget'ın bir iframe içinde olup olmadığını kontrol edin; iframe URL'sini kullanın
ERROR_BAD_PARAMETERS Gerekli parametreler eksik veya hatalı biçimlendirilmiş Gözden geçirinAPI belgelerigerekli alanlar için

Örnek: Hata işlemeyle doğru istek

import requests

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

    data = response.json()

    if data.get("status") == 1:
        return data["request"]  # task ID

    error = data.get("request", "UNKNOWN_ERROR")

    if error == "ERROR_WRONG_USER_KEY":
        raise ValueError("API key format is invalid. Must be 32 characters.")
    elif error == "ERROR_ZERO_BALANCE":
        raise RuntimeError("Account balance is zero. Top up at captchaai.com")
    elif error == "ERROR_PAGEURL":
        raise ValueError("pageurl parameter is missing from request")
    elif error in ("ERROR_GOOGLEKEY", "ERROR_WRONG_GOOGLEKEY"):
        raise ValueError(f"Invalid sitekey. Verify the data-sitekey value on the page.")
    elif error == "ERROR_BAD_TOKEN_OR_PAGEURL":
        raise ValueError("Sitekey/pageurl mismatch. Check if widget is in an iframe.")
    else:
        raise RuntimeError(f"API error: {error}")

# Usage
task_id = submit_recaptcha_v2("YOUR_API_KEY", "6Le-wvkSAAAAAN...", "https://staging.example.com/qa-login")
print(f"Task submitted: {task_id}")
async function submitRecaptchaV2(apiKey, sitekey, pageUrl) {
  const params = new URLSearchParams({
    key: apiKey,
    method: "userrecaptcha",
    googlekey: sitekey,
    pageurl: pageUrl,
    json: 1,
  });

  const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
  const data = await res.json();

  if (data.status === 1) return data.request;

  const error = data.request || "UNKNOWN_ERROR";
  const fixes = {
    ERROR_WRONG_USER_KEY: "API key format is invalid. Must be 32 characters.",
    ERROR_ZERO_BALANCE: "Account balance is zero. Top up at captchaai.com",
    ERROR_PAGEURL: "pageurl parameter is missing from request",
    ERROR_GOOGLEKEY: "Invalid sitekey. Check the data-sitekey attribute.",
    ERROR_BAD_TOKEN_OR_PAGEURL: "Sitekey/pageurl mismatch. Check iframe context.",
  };

  throw new Error(fixes[error] || `API error: ${error}`);
}

// Usage
const taskId = await submitRecaptchaV2("YOUR_API_KEY", "6Le-wvkSAAAAAN...", "https://staging.example.com/qa-login");
console.log(`Task submitted: ${taskId}`);

Sonuç aşaması hataları (res.php)

Bu hatalar, sonuç için https://ocr.captchaai.com/res.php yoklaması yapılırken meydana gelir.

Hata Kodu Sebep Düzeltme
CAPCHA_NOT_READY Çözüm hâlâ devam ediyor 5 saniye bekleyin ve tekrar anket yapın. Bu normaldir.
ERROR_CAPTCHA_UNSOLVABLE CAPTCHA çözülemedi Yeni parametrelerle yeni bir görev gönderin
ERROR_WRONG_ID_FORMAT Görev kimliği biçimi geçersiz in.php'den döndürülen kimliği doğrulayın
ERROR_WRONG_CAPTCHA_ID Görev kimliği mevcut değil Doğru görev kimliğini kaydettiğinizden emin olun
ERROR_EMPTY_ACTION action=get parametresi eksik Oylama isteğinize action=get ekleyin

Örnek: Doğru hata işlemeyle yoklama

import time
import requests

def poll_result(api_key, task_id, timeout=120):
    start = time.time()

    while time.time() - start < timeout:
        time.sleep(5)

        response = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key,
            "action": "get",
            "id": task_id,
            "json": 1
        })

        data = response.json()

        if data.get("status") == 1:
            return data["request"]  # solved token

        error = data.get("request", "")

        if error == "CAPCHA_NOT_READY":
            continue  # normal — keep waiting
        elif error == "ERROR_CAPTCHA_UNSOLVABLE":
            raise RuntimeError("CAPTCHA unsolvable. Submit a new task with fresh params.")
        elif error in ("ERROR_WRONG_ID_FORMAT", "ERROR_WRONG_CAPTCHA_ID"):
            raise ValueError(f"Invalid task ID: {task_id}")
        else:
            raise RuntimeError(f"Polling error: {error}")

    raise TimeoutError(f"Solve timed out after {timeout}s")

# Usage
token = poll_result("YOUR_API_KEY", task_id)
print(f"Token: {token[:50]}...")
async function pollResult(apiKey, taskId, timeout = 120000) {
  const start = Date.now();

  while (Date.now() - start < timeout) {
    await new Promise((r) => setTimeout(r, 5000));

    const params = new URLSearchParams({
      key: apiKey,
      action: "get",
      id: taskId,
      json: 1,
    });

    const res = await fetch(`https://ocr.captchaai.com/res.php?${params}`);
    const data = await res.json();

    if (data.status === 1) return data.request;

    if (data.request === "CAPCHA_NOT_READY") continue;
    if (data.request === "ERROR_CAPTCHA_UNSOLVABLE")
      throw new Error("Unsolvable. Submit a new task.");
    throw new Error(`Polling error: ${data.request}`);
  }

  throw new Error(`Solve timed out after ${timeout / 1000}s`);
}

Hedef sayfa reddi

API geçerli bir belirteç döndürdü ancak hedef site onu hâlâ reddediyor. Bunlar hata ayıklaması en zor hatalardır çünkü API her şeyin işe yaradığını düşünür.

Jeton yanlış alana enjekte edildi

Bazı sayfalar belirteci g-recaptcha-response metin alanında arar. Diğerleri grecaptcha.getResponse() kullanıyor. Diğerleri geri aranmayı bekliyor. Yanlış enjeksiyon yöntemini seçerseniz form gönderimi sessizce başarısız olur.

Düzeltme: Beklenen yolu belirlemek için sayfayı inceleyin:

# Method 1: Hidden field injection
driver.execute_script(
    'document.getElementById("g-recaptcha-response").innerHTML = arguments[0];',
    token
)

# Method 2: Callback execution (check data-callback attribute)
driver.execute_script(f'onCaptchaSuccess("{token}");')

# Method 3: Direct form field + submit
driver.execute_script(
    'document.querySelector("[name=g-recaptcha-response]").value = arguments[0];',
    token
)
driver.find_element("css selector", "form").submit()

Geri arama tetiklenmedi

Widget'ta data-callback="onSuccess" varsa veya grecaptcha.render()'yi callback özelliğiyle kullanıyorsa, gizli alanı tek başına doldurmak hiçbir şey yapmaz. Geri arama işlevini doğrudan çağırmalısınız.

Düzeltme: Geri aramayı bulun ve arayın:

// In browser console or Puppeteer/Playwright
// Check for data-callback
const widget = document.querySelector('.g-recaptcha');
const callbackName = widget?.getAttribute('data-callback');
if (callbackName && window[callbackName]) {
  window[callbackName](token);
}

Jetonun süresi doldu

Belirtecin alınması ile formun gönderilmesi arasında ~2 dakikadan fazla süre geçerse Google bunu reddeder. Bu, yavaş otomasyon boru hatlarında yaygındır.

Düzeltme: Belirteci aldıktan hemen sonra formu gönderin. İşlem hattınız yavaşsa çözümü başlangıç ​​yerine gönderim adımına yakın bir yerde isteyin.

Widget bir iframe'dedir

reCAPTCHA farklı bir alan adından bir iframe içine yüklenirse, üst sayfa URL'sini değil, pageurl olarak iframe kaynak URL'sini kullanmanız gerekir. ERROR_BAD_TOKEN_OR_PAGEURL hatası genellikle bu soruna işaret eder.

Düzeltme: Sayfayı inceleyin, reCAPTCHA'yı içeren iframe'i bulun ve bu iframe'in src URL'sini pageurl'niz olarak kullanın.


Hızlı teşhis kontrol listesi

Belirti Kontrol edilecek ilk şey
ERROR_GOOGLEKEY veya ERROR_WRONG_GOOGLEKEY Site anahtarı data-sitekey'den doğru şekilde kopyalandı mı?
ERROR_PAGEURL Tam sayfa URL'sini eklediniz mi?
ERROR_BAD_TOKEN_OR_PAGEURL Widget bir iframe'in içinde mi? iframe URL'sini kullanın.
CAPCHA_NOT_READY 3 dakikadan fazla Zorlu zorluklar için normal. Zaman aşımını 180 saniyeye artırın.
ERROR_CAPTCHA_UNSOLVABLE Yeni bir görev gönderin. Tekrarlanırsa sitekey + pageurl'yi doğrulayın.
Jeton çalışıyor ancak sayfa hiçbir şey yapmıyor data-callback'yi kontrol edin. Geri arama işlevini çağırın.
Jeton geri dönüyor ancak form hâlâ başarısız oluyor Jetonun süresi dolmuş olabilir (>2 dakika). Daha hızlı gönderin.
Aralıklı arızalar Yeni görev kimlikleriyle yeniden deneme mantığı ekleyin.

SSS

İstek doğru görünse bile reCAPTCHA v2 neden başarısız oluyor?

En yaygın üç neden şunlardır: (1) pageurl gerçek widget bağlamıyla eşleşmez - özellikle widget bir iframe içindeyken, (2) sayfa bir geri çağırma işlevi bekliyor ancak yalnızca gizli alanı doldurmuşsunuz veya (3) siz formu göndermeden önce belirtecin süresi dolmuş.

En yaygın reCAPTCHA v2 çözme hatası nedir?

Yanlış googlekey veya yanlış pageurl kullanılması. Bu, özellikle reCAPTCHA widget'ı farklı bir alan adı veya alt alan adı üzerindeki bir iframe'e yüklendiğinde yaygındır; site anahtarı ve URL, üst sayfayla değil, iframe bağlamıyla eşleşmelidir.

CAPCHA_NOT_READY ne anlama geliyor?

Bu, CAPTCHA'nın hala çözülmekte olduğu anlamına gelir. Bu bir hata değil. 5 saniye bekleyin ve res.php'yi tekrar sorgulayın. Tipik reCAPTCHA v2 çözüm süreleri 15-60 saniyedir.

API bir belirteç döndürdüğü halde sayfa onu hâlâ reddediyorsa ne yapmalıyım?

Üç şeyi sırayla kontrol edin: (1) Sayfa geri arama kullanıyor mu? Widget'ta data-callback'yi arayın. (2) pageurl'niz doğru mu — özellikle de widget bir iframe'deyse? (3) Jetonun alınması ve kullanılması arasında 2 dakikadan fazla süre geçti mi?

ERROR_CAPTCHA_UNSOLVABLE'yi nasıl halledebilirim?

Yeni parametrelerle yeni bir görev gönderin. Aynı görev kimliğini yeniden denemeyin. Bu hata sürekli tekrarlanıyorsa site anahtarınızın ve sayfa url'nizin gerçek sayfayla eşleştiğini ve CAPTCHA türünün standart reCAPTCHA v2 (Kurumsal değil; farklı parametreler gerektirir) olduğunu doğrulayın.


reCAPTCHA v2 iş akışınızı düzeltin

  1. Girişlerinizi doğrulayıngooglekey'yi data-sitekey'den çıkarın ve tam sayfa URL'sini kullanın (iframe'leri kontrol edin)
  2. Enjeksiyon yöntemini kontrol edin — sayfanın gizli alan mı, geri arama mı yoksa her ikisini birden mi bekleyeceğini belirleyin
  3. Hemen gönderin — jetonu aldıktan sonra 2 dakika içinde kullanın
  4. Hata işlemeyi ekleyin — her hata türünü yakalamak ve işlemek için yukarıdaki kod örneklerini kullanın

reCAPTCHA v2'yi çözmeye başlayınCaptchaAI çözücü. API anahtarınızı şuradan alın:captchaai.com/api.php.


İlgili kılavuzlar

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