CaptchaAI, resim CAPTCHA'ları için yanlış yanıtlar döndürürse, sorun neredeyse her zaman, çözümde değil, gönderilen resimdedir. İşte nasıl teşhis edileceği ve düzeltileceği.
Yanlış Yanıtların Yaygın Nedenleri
| Sebep | Frekans | Düzeltme |
|---|---|---|
| Resim yanlış kırpıldı | Çok yaygın | CAPTCHA öğesinin tamamını yakalayın |
| Düşük çözünürlük / sıkıştırma | Ortak | Daha yüksek kalitede resim gönder |
| Yanlış görüntü kodlaması | Ortak | Base64 kodlamasını doğrulayın |
| Eksik dil/type ipucu | ara sıra | language veya textinstructions'yi ekleyin |
| Bayat/expired resmi | ara sıra | Çözmeden önce yeni bir görüntü yakalayın |
Düzeltme 1: Göndermeden Önce Görüntü Kalitesini Doğrulayın
import base64
from io import BytesIO
from PIL import Image
def validate_captcha_image(image_path):
"""Check image quality before submitting to CaptchaAI."""
img = Image.open(image_path)
width, height = img.size
issues = []
# Minimum resolution
if width < 50 or height < 20:
issues.append(f"Too small: {width}x{height}px (min 50x20)")
# Check if mostly blank
pixels = list(img.getdata())
if img.mode == "RGB":
white_count = sum(1 for p in pixels if p[0] > 250 and p[1] > 250 and p[2] > 250)
else:
white_count = sum(1 for p in pixels if p > 250)
blank_ratio = white_count / len(pixels)
if blank_ratio > 0.95:
issues.append(f"Image appears blank ({blank_ratio:.0%} white)")
# File size check
img_bytes = BytesIO()
img.save(img_bytes, format="PNG")
size_kb = img_bytes.tell() / 1024
if size_kb < 1:
issues.append(f"File too small ({size_kb:.1f} KB) — may be empty")
if size_kb > 600:
issues.append(f"File too large ({size_kb:.0f} KB) — submit under 600 KB")
return issues
issues = validate_captcha_image("captcha.png")
if issues:
for issue in issues:
print(f"WARNING: {issue}")
else:
print("Image quality OK")
Düzeltme 2: Doğru Base64 Kodlaması
import base64
def encode_captcha(image_path):
"""Properly encode a CAPTCHA image to base64."""
with open(image_path, "rb") as f:
raw = f.read()
encoded = base64.b64encode(raw).decode("ascii")
# Verify round-trip
decoded = base64.b64decode(encoded)
assert decoded == raw, "Base64 encoding corrupted the image"
return encoded
# WRONG — encoding a file path string
bad = base64.b64encode(b"captcha.png").decode() # Encodes filename, not image!
# CORRECT — encoding file contents
with open("captcha.png", "rb") as f:
good = base64.b64encode(f.read()).decode()
Düzeltme 3: Görüntü Ön İşleme
from PIL import Image, ImageFilter, ImageEnhance
from io import BytesIO
import base64
def preprocess_captcha(image_path):
"""Improve image quality for better OCR accuracy."""
img = Image.open(image_path)
# Convert to RGB if needed
if img.mode != "RGB":
img = img.convert("RGB")
# Upscale small images
width, height = img.size
if width < 200:
scale = 200 / width
img = img.resize(
(int(width * scale), int(height * scale)),
Image.LANCZOS,
)
# Increase contrast
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(1.5)
# Sharpen
img = img.filter(ImageFilter.SHARPEN)
# Convert to PNG bytes
buffer = BytesIO()
img.save(buffer, format="PNG")
return base64.b64encode(buffer.getvalue()).decode()
Düzeltme 4: Tür ve Dil İpuçları Ekleme
import requests
def solve_image(api_key, image_base64, **hints):
"""Submit image CAPTCHA with quality hints."""
data = {
"key": api_key,
"method": "base64",
"body": image_base64,
"json": 1,
}
# Add optional hints for better accuracy
if "language" in hints:
data["language"] = hints["language"] # 0=default, 1=Cyrillic, 2=Latin
if "textinstructions" in hints:
data["textinstructions"] = hints["textinstructions"]
if "numeric" in hints:
data["numeric"] = hints["numeric"] # 1=digits only, 2=letters only
if "min_len" in hints:
data["min_len"] = hints["min_len"]
if "max_len" in hints:
data["max_len"] = hints["max_len"]
resp = requests.post("https://ocr.captchaai.com/in.php", data=data, timeout=30)
return resp.json()
# Example: Digits-only CAPTCHA, 4-6 characters
result = solve_image(
"YOUR_API_KEY",
encoded_image,
numeric=1,
min_len=4,
max_len=6,
)
# Example: Case-sensitive text
result = solve_image(
"YOUR_API_KEY",
encoded_image,
textinstructions="Case-sensitive, enter exactly as shown",
)
Düzeltme 5: Tam CAPTCHA Öğesini Yakalayın
from selenium import webdriver
from selenium.webdriver.common.by import By
import base64
def capture_captcha_element(driver, selector):
"""Screenshot only the CAPTCHA element, not the full page."""
element = driver.find_element(By.CSS_SELECTOR, selector)
# Element screenshot (better than page crop)
png_bytes = element.screenshot_as_png
# Verify it's not empty
if len(png_bytes) < 500:
raise ValueError("Screenshot too small — element may not be visible")
return base64.b64encode(png_bytes).decode()
# Usage
driver = webdriver.Chrome()
driver.get("https://example.com")
image_b64 = capture_captcha_element(driver, "img#captchaImage")
Düzeltme 6: Dynamic/Rotating CAPTCHA'ları işleme
import time
def solve_with_fresh_image(driver, api_key, captcha_selector):
"""Capture and solve CAPTCHA immediately to avoid expiry."""
# Wait for CAPTCHA to load fully
time.sleep(2)
# Capture fresh
element = driver.find_element(By.CSS_SELECTOR, captcha_selector)
png_bytes = element.screenshot_as_png
body = base64.b64encode(png_bytes).decode()
# Submit immediately
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": api_key,
"method": "base64",
"body": body,
"json": 1,
}, timeout=30)
result = resp.json()
if result.get("status") != 1:
raise RuntimeError(result.get("request"))
task_id = result["request"]
# Poll — image CAPTCHAs solve fast
time.sleep(5)
for _ in range(12):
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key, "action": "get",
"id": task_id, "json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
return data["request"]
if data["request"] != "CAPCHA_NOT_READY":
raise RuntimeError(data["request"])
time.sleep(3)
raise TimeoutError("Image solve timeout")
Sorun Giderme Kontrol Listesi
| Belirti | Teşhis | Düzeltme |
|---|---|---|
| Cevap saçmalık | Base64 kodlaması yanlış | Gidiş dönüş kodlamasını doğrulayın |
| Cevap yakın ama yanlış | Düşük görüntü kalitesi | Önişlem: lüks, keskinleştirme, kontrast |
| Cevapta yanlış karakter sayısı var | Eksik uzunluk ipuçları | min_len/max_len parametrelerini ekle |
| Cevap karışık harfler/digits | Eksik tür ipucu | Sayısal=1 veya sayısal=2 ekleyin |
| Boş yanıt döndürüldü | Boş/corrupted resmi | Göndermeden önce resmi doğrulayın |
| Doğru cevap ancak site reddediyor | Büyük/küçük harf duyarlılığı | Vaka için metin talimatlarını ekleyin |
SSS
Resim CAPTCHA'ları için CaptchaAI ne kadar doğrudur?
CaptchaAI, düzgün şekilde gönderilen görsellerle 27.500'den fazla CAPTCHA türünü yüksek doğrulukla destekler. Çoğu arıza, düşük görüntü kalitesinden veya yanlış parametrelerden kaynaklanmaktadır.
Görüntüleri göndermeden önce ön işleme tabi tutmalı mıyım?
Yalnızca orijinal görüntünün kalitesi düşükse. CaptchaAI, standart CAPTCHA görüntülerini ön işleme gerek kalmadan iyi bir şekilde işler. Çok küçük görüntülerin ölçeklendirilmesi ve kontrastın artırılması uç durumlarda yardımcı olabilir.
Yanlış cevapları bildirebilir miyim?
Evet. Yanlış yanıtları bildirmek için reportbad uç noktasını görev kimliğiyle birlikte kullanın. Bu, doğruluğu artırmaya yardımcı olur ve hesabınıza kredi kazandırabilir.
İlgili Kılavuzlar
Resimleri doğru bir şekilde çözün —CaptchaAI'yi deneyin.