Troubleshooting

Grid Image CAPTCHA Hataları ve Çözümleri

Grid image CAPTCHA çözümü başarısız olduğunda kök neden neredeyse her zaman üç kutudan birindedir: gönderdiğiniz görüntü, aldığınız çözümü sayfaya uygulama biçiminiz ya da zamanlama. Aşağıdaki başlıklar bu üç kutuyu tek tek açar; bir hata kodu görüyorsanız doğrudan ilgili başlığa geçin, kod belirsizse önce hızlı triyaj tablosunu sırayla eleyin.

  • Görüntü kutusu: biçim, boyut ve boş dosya hataları — CaptchaAI'ye gönderim aşamasında oluşur.
  • Uygulama kutusu: doğru gelen çözümün yanlış hücrelere tıklanması — off-by-one, iframe, dinamik ızgara.
  • Zamanlama kutusu: CAPTCHA'nın süresi dolması ve sonsuz sorgulama döngüleri.

Hızlı triyaj tablosu

Hata kodu net değilse teşhisi yukarıdan aşağıya bu sırayla daraltın; çoğu vaka ilk üç satırda çözülür.

Kontrol Eylem
Görüntü biçimi mi? PNG veya JPEG, doğru kodlanmış
Görüntü boyutu? 600 KB'ın altında
Tüm ızgara yakalandı mı? Izgaranın tamamını kenar boşluğuyla ekleyin
Görüntü kalitesi? Net; bulanık veya küçültülmüş değil
Çözüm biçimi? Virgülle ayrılmış dizinleri doğru ayrıştırın
İndeks tabanı? Diziler için 1 tabanlıyı 0 tabanlıya çevirin
Iframe bağlamı? Varsa CAPTCHA iframe'ine geçin
CAPTCHA süresi doldu mu? Yakaladıktan hemen sonra gönderin

Görüntü gönderme hataları

Bu gruptaki hatalar görüntü CaptchaAI'ye ulaşmadan tetiklenir; kaynağı çoğunlukla kodlama veya boyuttur.

ERROR_WRONG_FILE_EXTENSION

Bu hata, gönderilen dosyanın geçerli bir görüntü biçimi olmadığı anlamına gelir. Yalnızca PNG veya JPEG kullanın ve base64 dizesinin doğru kodlandığını doğrulayın. En sık yapılan hata, tarayıcıdan okuduğunuz data URI'yi olduğu gibi göndermektir; API yalnızca ham base64 bekler, bu yüzden data:image/...;base64, önekini göndermeden önce kaldırın.

# WRONG — includes data URI prefix
body = "data:image/png;base64,iVBORw0KGgo..."

# CORRECT — raw base64 only
body = "iVBORw0KGgo..."

ERROR_TOO_BIG_CAPTCHA_FILESIZE

Görüntü, en fazla dosya boyutunu (genellikle 600 KB) aşınca bu hata döner. Retina ekranlarda ve yüksek DPI'lı sanal makinelerde yakalanan görseller bu sınırı kolayca geçer; göndermeden önce genişliği ölçekleyin.

from PIL import Image
import io
import base64

# Resize if too large
img = Image.open("captcha.png")
if img.width > 600:
    ratio = 600 / img.width
    img = img.resize((600, int(img.height * ratio)), Image.LANCZOS)

buffer = io.BytesIO()
img.save(buffer, format="PNG")
b64 = base64.b64encode(buffer.getvalue()).decode()

ERROR_ZERO_CAPTCHA_FILESIZE

Boş dosya veya başarısız bir görüntü çıkarma bu hataya yol açar. Görüntüyü çıkarmadan önce öğenin yüklendiğini doğrulayın, src özniteliğinin boş olmadığını kontrol edin ve geç yüklenen (lazy-load) görselleri bekleyin.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Wait for image to load
WebDriverWait(driver, 10).until(
    lambda d: d.find_element(By.CSS_SELECTOR, ".captcha img").get_attribute("complete") == "true"
)

Grid image CAPTCHA çözüm kalitesi hataları

Görüntü ulaştığı halde sonuç yanlış geliyorsa, sorun neredeyse her zaman yakalama kalitesindedir.

ERROR_CAPTCHA_UNSOLVABLE

Bu hata görüntünün çok bulanık, bozuk veya nesnelerin tanınmaz olduğunu gösterir. Izgarayı tam çözünürlükte yakalayın, ölçeği küçültmeyin ve ızgarayı örten kaplama veya filigran olmadığından emin olun. Kalıcı bir durum değildir; aynı kareyi tekrar göndermek yerine yeni bir CAPTCHA isteyip yeniden gönderin, çünkü bazı zorluklar doğası gereği belirsizdir.

Yanlış hücreler seçildi

Düşük görüntü kalitesi veya eksik yakalama, yanlış hücrelerin işaretlenmesine yol açar. Kenarlıklar dahil, CAPTCHA öğesinin tamamının ekran görüntüsünü alın; çok sıkı kırpmayın, birkaç piksel kenar boşluğu bırakın. Yakaladığınız görüntüyü kaydedip elle inceleyerek doğrulamak en hızlı teşhis yöntemidir.

# Take a proper element screenshot
captcha_el = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
captcha_el.screenshot("debug_captcha.png")

# Open and check manually
from PIL import Image
Image.open("debug_captcha.png").show()

Çözümü sayfaya uygulama hataları

Bu bölümdeki hatalar en sinsi olanlardır: API doğru yanıtı döndürür, ama sayfada yanlış hücrelere tıklanır. Kod tarafındaki üç klasik tuzağı sırayla ele alalım.

Bir kayan (off-by-one) dizin hataları

Bu hata, 1 tabanlı API yanıtı ile 0 tabanlı dizi indeksi arasındaki uyumsuzluktan doğar. API 1,3,5 döndürdüğünde bunları dizi indeksine dönüştürmeden kullanmayın; her indeksten bir çıkarın.

# API returns "1,3,5" (1-based)
solution = "1,3,5"
indices = [int(i) for i in solution.split(",")]

# DON'T: use directly as array index
# cells[1], cells[3], cells[5]  ← WRONG (off by one)

# DO: convert to 0-based
for idx in indices:
    cells[idx - 1].click()  # 1→0, 3→2, 5→4

Hücreler tıklamaya yanıt vermiyor

Tıklama hedefi yanlışsa — kaplama, iframe veya shadow DOM — hücreler tepki vermez. Önce CAPTCHA'nın bir iframe içinde olup olmadığını kontrol edin, gerekiyorsa bağlamı değiştirin ve hücreleri iframe içinde arayın.

# Check if captcha is in an iframe
iframes = driver.find_elements(By.TAG_NAME, "iframe")
for iframe in iframes:
    if "captcha" in iframe.get_attribute("src").lower():
        driver.switch_to.frame(iframe)
        break

# Now find and click cells
cells = driver.find_elements(By.CSS_SELECTOR, ".grid-cell")

Dinamik ızgara — döşemeler tıklamadan sonra değişiyor

reCAPTCHA tarzı dinamik ızgaralar tıklanan döşemeleri yenileriyle değiştirir; ham görüntü yöntemi burada güvenilmez olur. reCAPTCHA için görüntü yöntemi yerine token yöntemini kullanın, çünkü token yöntemi dinamik ızgaraları kendiliğinden ele alır.

# Token method handles dynamic grids automatically
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com",
    "json": 1
})

Zaman aşımı ve yeniden deneme hataları

Grid CAPTCHA'ları kısa ömürlüdür; zamanlamayı yönetmezseniz geçerli bir çözümü bile boşa harcarsınız.

Çözüm dönmeden CAPTCHA'nın süresi doluyor

Izgara CAPTCHA'larının geçerliliği genellikle 2–3 dakikada sona erer. Görüntüyü yakaladıktan hemen sonra gönderin; çözüm 60 saniyeden uzun sürerse CAPTCHA'yı yenileyip yeniden deneyin.

CAPCHA_NOT_READY sonsuz döngüye giriyor

Görev sessizce başarısız olduğunda sorgulama döngüsü hiç bitmeyebilir. En fazla yeniden deneme sayısı belirleyin ve gerçek hataları CAPCHA_NOT_READY durumundan ayırarak res.php üzerinden sorgulayın.

for attempt in range(30):
    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") not in ["CAPCHA_NOT_READY"]:
        break  # Actual error, stop polling

raise Exception("Grid captcha solve failed — refresh and retry")

Grid image CAPTCHA için yerel senaryolar

Türkiye'de bu hatalar en çok iki yerde ısınır. Birincisi, Schengen randevusu için yoğun kullanılan BLS vize portallarıdır: buradaki grid CAPTCHA'ları görsel olarak nettir, ama portal görselleri yavaş yüklendiği için ERROR_ZERO_CAPTCHA_FILESIZE sık görülür — görüntü öğesinin complete durumunu beklemek çoğu vakayı çözer. İkincisi, e-ticaret ve fintech ekiplerinin ödeme akışlarını doğrulayan QA otomasyonlarıdır: yüksek DPI'lı sanal makinelerde çalışan bu testlerde çoğu hata ERROR_TOO_BIG_CAPTCHA_FILESIZE olarak döner, çünkü ekran görüntüleri 600 KB sınırını aşar. Her iki durumda da veri kazıma yapıyorsanız, topladığınız kişisel verilerin KVKK kapsamına girdiğini ve akışınızın yetkili bir QA/test bağlamında kalması gerektiğini unutmayın.


Sık sorulan sorular

ERROR_CAPTCHA_UNSOLVABLE hatasını nasıl azaltırım?

Bu hata neredeyse her zaman kaynak görüntünün kalitesindendir. Izgarayı tam çözünürlükte, kaplama veya filigran olmadan yakalayın ve küçültmeyin. Kalıcı bir durum değildir; aynı kareyi tekrar göndermek yerine yeni bir CAPTCHA isteyip yeniden gönderin.

Grid image CAPTCHA çözmek ne kadar tutar?

CaptchaAI çözüm başına değil, eşzamanlı thread başına ücretlendirir ve her planda thread başına sınırsız çözüm gelir. BASIC ($15/ay, 5 thread) ile başlayabilirsiniz; grid image CAPTCHA'lar için ayrı bir tür ücreti veya günlük üst sınır yoktur.

reCAPTCHA ızgarasını görüntü yöntemiyle mi çözmeliyim?

Hayır. reCAPTCHA'nın dinamik ızgaralarında döşemeler tıklamadan sonra değiştiği için görüntü yöntemi güvenilmez olur. Bu durumda method=userrecaptcha token yöntemini kullanın; ham görüntü yöntemini yalnızca statik grid CAPTCHA'ları için ayırın.

BLS vize portalındaki grid CAPTCHA için talimat metni gerekli mi?

recaptcha=1 ile method=post kullanıyorsanız talimat gerekmez; çözücü nesneleri görsel olarak tanır. method=bls kullanıyorsanız talimat metnini her zaman ekleyin, aksi halde çözüm hedefi belirsiz kalır.


İlgili kılavuzlar

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