Grid image CAPTCHA'da (reCAPTCHA v2 görüntü doğrulaması) yanlış döşemeler seçiliyor ya da sürekli ERROR_CAPTCHA_UNSOLVABLE dönüyorsa, hata neredeyse her zaman CaptchaAI'ye gönderdiğiniz dört değerden birindedir: ızgara boyutu, görüntünün kendisi, talimat metni ve hücre indekslerini nasıl saydığınız. Çözüm motoru genellikle doğru çalışır; koordinatlar tutmadığında önce bu dört girdiyi kontrol edin. Aşağıda her birini nasıl teşhis edip düzelteceğinizi çalışan Python örnekleriyle sırayla ele alıyoruz.
Grid image çözümü neyi döndürür?
CaptchaAI ızgara görüntüyü alır, her hücreyi tek tek analiz eder ve talimatla eşleşen hücrelerin indekslerini bir dizi olarak döndürür. Hücreler soldan sağa, yukarıdan aşağıya numaralanır:
3×3 Grid: 4×4 Grid:
1 2 3 1 2 3 4
4 5 6 5 6 7 8
7 8 9 9 10 11 12
13 14 15 16
- Örnek bir yanıt
[1, 3, 6, 9]biçimindedir: 1, 3, 6 ve 9 numaralı hücreler hedef nesneyi içerir. - Bu indeksleri tıklama noktalarına çevirirken yapılan küçük bir kayma bile tüm çözümü boşa çıkarır; koordinat hataları çoğu zaman çözüm kalitesiyle değil, entegrasyonla ilgilidir.
- Yani yanlış hücrelerle karşılaştığınızda ilk bakmanız gereken yer motorun döndürdüğü dizi değil, o diziyi tarayıcıya taşıyan kendi kodunuzdur.
Belirti-girdi eşleştirme tablosu
Gördüğünüz belirti çoğu zaman hangi girdinin sorunlu olduğunu doğrudan gösterir; teşhise buradan başlayın:
| Belirti | Olası sorunlu girdi | Hızlı düzeltme |
|---|---|---|
| Tamamen alakasız döşemeler seçiliyor | Izgara boyutu (grid_size) |
Gerçek ızgarayı 3×3/4×4 olarak eşleyin |
| Seçimler tam bir hücre kaymış | İndeks tabanı (0 vs 1) | Her indeksten 1 çıkarın |
| Bazen doğru, bazen yanlış sonuç | Kırpılmış veya ölçeklenmiş görüntü | Görüntüyü iframe'den ham yakalayın |
ERROR_WRONG_FILE_EXTENSION dönüyor |
Görüntü formatı | Önce PNG'ye dönüştürün |
| Rastgele, alakasız nesneler seçiliyor | Belirsiz talimat metni | CAPTCHA'daki tam ifadeyi gönderin |
Koordinat hatalarının başlıca nedenleri ve çözümleri
Izgara boyutu (grid_size) yanlış
- En sık görülen koordinat hatası budur: CAPTCHA 4×4 bir ızgaraysa ama
grid_size=3x3gönderirseniz hücre numaralandırması kayar ve tamamen yanlış döşemeler seçilir. - Izgara boyutunu göz kararıyla belirlemek yerine görüntüden programlı olarak tespit edin.
# WRONG — 4×4 grid sent as 3×3
data = {
"key": "YOUR_API_KEY",
"method": "post",
"grid_size": "3x3", # Wrong!
"img_type": "recaptcha",
"instructions": "traffic lights",
"json": 1
}
# CORRECT — match the actual grid
data = {
"key": "YOUR_API_KEY",
"method": "post",
"grid_size": "4x4", # Correct
"img_type": "recaptcha",
"instructions": "traffic lights",
"json": 1
}
Görüntü genişliğinden ızgara boyutunu şöyle çıkarabilirsiniz:
from PIL import Image
img = Image.open("grid_captcha.png")
width, height = img.size
# reCAPTCHA grids are square. 3×3 tiles are ~100px each, 4×4 tiles are ~75px each
tile_width = width // 3
if width % 4 == 0 and (width // 4) < 100:
grid_size = "4x4"
else:
grid_size = "3x3"
print(f"Detected grid size: {grid_size}")
Kırpılmış veya yeniden boyutlandırılmış görüntü
- Kırpılmış, yeniden boyutlandırılmış ya da tam sayfa ekran görüntüsüne gömülü bir resim ızgara hizalamasını bozar; CaptchaAI'nin tam olarak reCAPTCHA'nın oluşturduğu haliyle orijinal görüntüye ihtiyacı vardır.
- Görüntüyü tüm sayfadan değil, doğrudan reCAPTCHA iframe'inden yakalayın.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
# Switch to reCAPTCHA iframe
iframe = driver.find_element(By.CSS_SELECTOR, 'iframe[title*="recaptcha"]')
driver.switch_to.frame(iframe)
# Get the grid image element
grid_img = driver.find_element(By.CSS_SELECTOR, "img.rc-image-tile-wrapper img")
grid_img.screenshot("grid_captcha.png") # Captures just the grid, not the whole page
Belirsiz veya yanlış talimat metni
- Talimat metni, CAPTCHA'nın istediği nesneyle birebir eşleşmelidir;
select imagesgibi belirsiz bir metin yanlış hücre seçimine yol açar. - CAPTCHA'da yazan tam ifadeyi gönderin.
# WRONG — too vague
data["instructions"] = "select images"
# CORRECT — specific instruction from the CAPTCHA
data["instructions"] = "crosswalks"
Sık kullanılan talimat değerleri ve hedefledikleri nesneler:
| Talimat değeri | Hedef nesne |
|---|---|
crosswalks |
yaya geçitleri |
traffic lights |
trafik ışıkları |
cars / buses |
otomobiller / otobüsler |
motorcycles / bicycles |
motosikletler / bisikletler |
fire hydrants |
yangın muslukları |
stairs / bridges / parking meters |
merdivenler / köprüler / parkmetreler |
0 tabanlı ve 1 tabanlı indeks kayması
- Hücreleriniz tam olarak bir birim kaymışsa neden büyük olasılıkla budur: CaptchaAI 1 tabanlı indeks döndürür.
- Otomasyon kodunuz Selenium'daki gibi 0 tabanlı çalışıyorsa her indeksten 1 çıkarın.
import json
# CaptchaAI returns 1-based indices
solution = json.loads(result["request"]) # e.g., [1, 3, 6, 9]
# Convert to 0-based for Selenium click automation
zero_based = [cell - 1 for cell in solution]
# Click grid cells using 0-based index
tiles = driver.find_elements(By.CSS_SELECTOR, ".rc-image-tile-wrapper img")
for idx in zero_based:
tiles[idx].click()
Desteklenmeyen görüntü formatı
- CaptchaAI JPG, JPEG, PNG ve GIF destekler; diğer formatlar
ERROR_WRONG_FILE_EXTENSIONdöndürür. - WebP veya BMP görüntüleri göndermeden önce PNG'ye çevirin.
| Format | Durum |
|---|---|
| JPG / JPEG / PNG / GIF | Doğrudan kabul edilir |
| WebP / BMP / AVIF | Önce PNG'ye dönüştürün |
# WRONG — WebP or BMP
files = {"file": open("grid.webp", "rb")} # Not supported
# CORRECT — convert to PNG first
from PIL import Image
img = Image.open("grid.webp")
img.save("grid.png", "PNG")
files = {"file": open("grid.png", "rb")}
Adım adım karar ağacı
Hangi girdinin sorunlu olduğunu hızlıca daraltmak için şu sırayı izleyin:
Grid cells are wrong
↓
Is grid_size correct (3x3 or 4x4)? → No → Fix grid_size parameter
↓ Yes
Is the image the original CAPTCHA (not cropped)? → No → Capture directly from iframe
↓ Yes
Is instruction text specific? → No → Use exact CAPTCHA instruction text
↓ Yes
Using 1-based indexing for clicks? → No → Convert solution to 0-based
↓ Yes
Image in supported format (JPG/PNG)? → No → Convert image format
↓ Yes
Report tiles to CaptchaAI via reportbad
Örnek: bir e-ticaret ödeme akışının QA testi
Diyelim ki bir müşteri için e-ticaret kayıt ve ödeme akışını (staging.example.com/qa-login) Selenium ile test ediyorsunuz ve kayıt adımında reCAPTCHA v2 grid doğrulaması çıkıyor. İlk koşularda bot sürekli yanlış döşemelere tıklıyordu. Sıralı teşhiste iki ayrı sorun ortaya çıktı:
- Staging ortamı görüntüyü 300 piksele yeniden boyutlandırdığı için
grid_sizetespiti 4×4 yerine 3×3'e kayıyordu. - Tıklama döngüsü indeksleri 1 tabanlı bırakıyor, Selenium ise 0 tabanlı beklediği için her seçim bir hücre kayıyordu.
Görüntüyü iframe'den ham haliyle yakalayıp indeksleri 0 tabanlıya çevirdikten sonra akış stabil hale geldi. Türkiye'deki otomasyon projelerinin büyük kısmı bu tür kayıt ve ödeme akışı testleri etrafında döner; koordinat mantığını bir kez doğru kurmak, sonraki tüm koşularda tekrarlayan hataları ortadan kaldırır. Kişisel veri içeren formları test ederken, KVKK kapsamında yalnızca yetkili QA ortamlarında çalıştığınızdan emin olun.
Doğru parametrelere rağmen hata sürüyorsa: reportbad
Tüm girdiler doğru olduğu halde koordinatlar tutarlı biçimde yanlış geliyorsa çözümü bildirin; bu bildirim CaptchaAI'nin doğruluğu iyileştirmesine yardımcı olur ve çözüm ücretini iade edebilir.
requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "reportbad",
"id": task_id,
"json": 1
})
Yayına almadan önce hızlı kontrol listesi
- Herhangi bir yanıt göndermeden önce ızgara boyutunun hedef sayfanın beklediği koordinat düzeniyle eşleştiğini doğrulayın.
- Tıklama noktalarının tarayıcı yakınlaştırmasından ve cihaz piksel oranından etkilenmemesi için görüntü ölçeklemesini ve görünüm alanı hesabını normalleştirin.
- Izgara sınırlarının dışına düşen yanıtları sessizce iletmek yerine reddedin.
Sık sorulan sorular
grid_size parametresini otomatik belirleyebilir miyim?
Evet. reCAPTCHA ızgaraları karedir; görüntü genişliğini 3 ve 4'e bölüp döşeme boyutuna bakarak 3×3 mü 4×4 mü olduğunu tespit edebilirsiniz. Emin değilseniz sabit bir değere güvenmek yerine otomatik tespiti tercih edin.
reportbad bildirimi çözüm ücretimi iade eder mi?
reportbad çağrısı yanlış bir çözümü işaretler ve birçok durumda o çözümün ücretini iade eder. Ayrıca doğruluğun zamanla iyileşmesine katkı sağlar; yalnızca gerçekten hatalı sonuçlar için kullanın.
Tıkladığım döşemeler tam bir hücre kayıyor, neden?
CaptchaAI 1 tabanlı indeks döndürür. Kodunuz 0 tabanlı bekliyorsa her indeksten 1 çıkarın. Selenium'un find_elements listesi 0 tabanlı olduğu için bu en sık yapılan hatalardan biridir.
CaptchaAI hangi görüntü formatlarını kabul ediyor?
JPG, JPEG, PNG ve GIF kabul edilir. WebP, BMP veya AVIF gibi formatlar ERROR_WRONG_FILE_EXTENSION döndürür; göndermeden önce PNG'ye dönüştürün.
Dört girdiyi de doğruladım ama hâlâ ERROR_CAPTCHA_UNSOLVABLE alıyorum, ne yapmalıyım?
Bu hata genellikle görüntü çözünürlüğünün çok düşük olmasından ya da gönderilen resmin tanınabilir bir ızgara CAPTCHA olmamasından kaynaklanır. Görüntüyü tam çözünürlükte ve kırpmadan iframe'den yakaladığınızı, talimat metninin CAPTCHA'dakiyle birebir aynı olduğunu doğrulayın. Sorun sürerse çözümü reportbad ile bildirin ve isteği tekrar deneyin.
Grid image CAPTCHA'ları CaptchaAI ile çözün
Doğru ızgara boyutu, orijinal görüntü ve net talimatla gönderdiğinizde grid image doğrulamaları güvenilir biçimde çözülür. CaptchaAI thread tabanlı planlarla çalışır — BASIC ($15/ay, 5 thread) ile başlayıp hacminize göre yukarı ölçekleyebilirsiniz; ödeme USD üzerinden olduğu için maliyet öngörülebilir kalır. Başlamak için captchaai.com adresinden hesabınızı açın.