Klasik image/OCR CAPTCHA en eski doğrulama türü olsa da otomasyon iş akışlarında hâlâ en çok baş ağrıtan hatalar buradan çıkar: görüntü hiç gönderilemez, ya da çözücü 3B7 yerine BB7 döndürür ve doğrulama sessizce başarısız olur. İyi haber şu: bu hataların neredeyse tamamı üç yerden birinden gelir ve çoğu, in.php isteğinize eklediğiniz tek bir ipucu parametresiyle çözülür.
Bir çözüm başarısız olduğunda sırayla şu üç şeye bakın: görüntünün kendisi (boş, çok büyük, çok küçük mü?), gönderim biçimi (base64 doğru mu?) ve çözücüye verdiğiniz ipuçları (karakter kümesi, uzunluk, büyük/küçük harf). Aşağıda bu üç grubu tek tek ele alıyoruz.
Türkiye'de bu tür klasik image CAPTCHA'lara en sık BLS vize başvuru portalları ve eski e-ticaret/QA panelleri gibi yerlerde rastlarsınız. Bu akışların QA testlerini otomatikleştirirken aşağıdaki parametreler doğruluğu belirgin biçimde artırır.
Gönderim aşamasındaki OCR CAPTCHA hataları
Bu hatalar, görüntü çözücüye ulaşmadan önce ortaya çıkar. Genellikle kod tarafındadır ve düzeltmesi en hızlı olanlardır.
ERROR_WRONG_FILE_EXTENSION — biçim ya da base64 sorunu
Neden: Görüntü desteklenen bir biçimde değil ya da base64 dizesi geçersiz. En sık görülen tuzak, base64'ün başına data:image/png;base64, önekini eklemektir — bu önek gönderilmemeli.
import base64
# Ensure proper encoding
with open("captcha.png", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
# Don't include the data URI prefix
# WRONG: "data:image/png;base64,iVBOR..."
# RIGHT: "iVBOR..."
ERROR_ZERO_CAPTCHA_FILESIZE — görüntü boş geldi
Neden: Görüntü dosyası boş ya da indirme başarısız oldu. Genellikle sayfa henüz yüklenmeden ekran görüntüsü alınması veya bozuk bir kaynak URL'sinden kaynaklanır. Göndermeden önce boyutu doğrulayın:
import os
# Check file size before submitting
if os.path.getsize("captcha.png") == 0:
print("Image file is empty — re-download")
# Re-capture the captcha
ERROR_TOO_BIG_CAPTCHA_FILESIZE — dosya çok büyük
Neden: Görüntü izin verilen en büyük boyutu (genellikle 600 KB) aşıyor. Metin netliğini bozmadan dosyayı küçültün:
from PIL import Image
import io
img = Image.open("captcha.png")
# Reduce quality without losing text clarity
buffer = io.BytesIO()
img.save(buffer, format="PNG", optimize=True)
Yanlış metin dönüyor: tanıma hataları
Görüntü sorunsuz gönderildiği hâlde çözücü yanlış metin döndürüyorsa, çoğu zaman ona yeterli bağlam vermemişsinizdir. Karakter kümesini, uzunluğu ya da büyük/küçük harf davranışını daraltan bir ipucu parametresi, doğruluğu tek satırda artırır.
Benzer karakterler karışıyor (0/O, 1/l/I, 5/S)
Neden: Çözücü, biçimsel olarak birbirine benzeyen karakterleri karıştırıyor. CAPTCHA'nın yalnızca rakam ya da yalnızca harf içerdiğini biliyorsanız arama uzayını daraltın:
# If captcha is digits only
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"numeric": 1, # 1 = digits only
"json": 1
})
# If captcha is letters only
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"numeric": 2, # 2 = letters only
"json": 1
})
Büyük/küçük harf yanlış geliyor
Neden: Çözücü öntanımlı olarak her şeyi küçük harfe indirger. Büyük/küçük harf ayrımı önemliyse regsense=1 verin:
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"regsense": 1, # Case-sensitive
"json": 1
})
Fazladan ya da eksik karakterler
Neden: Görüntüdeki parazit karakter sanılıyor ya da bitişik karakterler tek karaktere birleşiyor. Uzunluk sabitse alt/üst sınır verin:
# If you know the CAPTCHA is always 6 characters
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"min_len": 6,
"max_len": 6,
"json": 1
})
Matematik ifadesi çözülmüyor
Neden: Çözücü 3+7 ifadesini hesaplamak yerine metni olduğu gibi okuyor. Sonucu (10) döndürmesi için calc=1 verin:
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"calc": 1, # Compute the math expression
"json": 1
})
Görüntü kalitesinden kaynaklanan hatalar
İpucu parametreleri doğru olsa bile, çözücüye gelen görüntü okunamaz durumdaysa sonuç yanlış çıkar. Bu bölümdeki düzeltmeler gönderimden önce görüntüyü hazırlar.
CAPTCHA çok küçük
Sorun: Çok küçük görüntülerde (50 piksel yüksekliğin altında) karakter ayrıntısı kayboluyor.
Düzeltme: Mümkün olan en büyük boyutta yakalayın. Sayfa CAPTCHA'yı küçük gösteriyorsa, daha yüksek çözünürlüklü bir kaynak URL'si olup olmadığını kontrol edin:
# Check for higher-res version
img_src = captcha_el.get_attribute("src")
# Some sites use ?size=small — try removing or changing the parameter
high_res_src = img_src.replace("size=small", "size=large")
Animasyonlu CAPTCHA
Sorun: Bazı CAPTCHA'lar animasyonlu GIF kullanır ve metin yalnızca belirli karelerde görünür.
Düzeltme: Metni içeren kareyi ayıklayın:
from PIL import Image
gif = Image.open("captcha.gif")
# Extract each frame and find the one with text
for i in range(gif.n_frames):
gif.seek(i)
gif.save(f"frame_{i}.png")
Şeffaf arka plan
Sorun: Şeffaf arka planlı PNG'ler OCR için doğru şekilde işlenemeyebilir.
Düzeltme: Görüntünün altına beyaz bir katman yerleştirin:
from PIL import Image
img = Image.open("captcha.png").convert("RGBA")
background = Image.new("RGBA", img.size, (255, 255, 255, 255))
background.paste(img, mask=img)
background.convert("RGB").save("captcha_white_bg.png")
Yanlış çözümleri geri bildirin
CaptchaAI yanlış metin döndürdüğünde bunu bildirmek hem çözücünün doğruluğunu iyileştirir hem de o çözümün ücretini geri kazandırabilir. Otomasyonunuza bir doğrulama adımı ekleyip başarısız çözümleri otomatik olarak raporlamak, uzun vadede doğruluğu yukarı çeker:
# Report bad answer
requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "reportbad",
"id": task_id
})
Doğruluk parametreleri: hızlı başvuru
Aşağıdaki ipucu parametrelerini in.php isteğinize ekleyerek çözücüyü CAPTCHA'nızın yapısına göre ayarlayabilirsiniz. Birden fazlasını birlikte kullanabilirsiniz — örneğin yalnızca büyük harfli, sabit uzunlukta bir kod için regsense=1 ve min_len/max_len birlikte iş görür.
| Parametre | Ne zaman kullanılır | Etkisi |
|---|---|---|
numeric=1 |
Yalnızca rakam | Harf/rakam karışıklığını ortadan kaldırır |
numeric=2 |
Yalnızca harf | Harf/rakam karışıklığını ortadan kaldırır |
min_len / max_len |
Uzunluk biliniyor | Fazladan/eksik karakteri önler |
regsense=1 |
Büyük/küçük harf önemli | Büyük ve küçük harfi korur |
calc=1 |
Matematik ifadesi | Hesaplanmış sonucu döndürür |
phrase=1 |
Boşluk içeriyor | Çok kelimeli yanıta izin verir |
language=1 |
Kiril metni | Doğru karakter kümesini kullanır |
language=2 |
Latin metni | Doğru karakter kümesini kullanır |
Sık sorulan sorular
Hangi ipucu parametrelerini birlikte kullanabilirim?
Çoğu parametre birlikte çalışır. Sabit uzunlukta, büyük/küçük harfe duyarlı bir kod için regsense=1 ile min_len/max_len'i, yalnızca rakamlı bir alan için numeric=1 ile uzunluk sınırlarını birleştirebilirsiniz. Yalnızca ihtiyacınız olan kısıtları verin; gereksiz sıkı kurallar doğru çözümleri de eleyebilir.
numeric=1 verdiğim hâlde çözücü harf döndürüyor, ne yapmalıyım?
Önce görüntüyü gözle kontrol edin: CAPTCHA gerçekten yalnızca rakam mı içeriyor? İçinde tek bir harf bile varsa numeric=1 beklediğiniz sonucu vermez. Alan hem harf hem rakam içeriyorsa numeric'i kaldırıp uzunluğu min_len/max_len ile, büyük/küçük harfi regsense=1 ile daraltmayı deneyin.
Yanlış dönen çözümler için ücret iadesi alır mıyım?
Çözücü yanlış metin döndürürse res.php üzerinden action=reportbad çağrısıyla bunu bildirebilirsiniz. Bu geri bildirim, o çözümün ücretini geri kazandırabilir ve zamanla çözücünün doğruluğunu artırır.
Kiril veya farklı alfabelerdeki CAPTCHA'ları nasıl çözerim?
language parametresini ayarlayın: Kiril için 1, Latin için 2. Diğer alfabeler için parametreyi boş bırakın ve çözücünün otomatik algılamasına izin verin. Alfabe daralması, benzer karakter karışıklığını da azaltır.
Sesli (audio) CAPTCHA'ları da bu yöntemle çözebilir miyim?
Hayır. Bu OCR akışı yalnızca image/text CAPTCHA'lar içindir; sesli CAPTCHA'lar farklı bir çözüm yaklaşımı gerektirir. Sesli CAPTCHA desteği için CaptchaAI belgelerine bakın.