Karşılaştırmalar

Metin CAPTCHA ve Resim CAPTCHA: Geliştirici Karşılaştırması

Metin CAPTCHA'ları, kullanıcılardan bozuk harf ve sayıları yazmalarını ister. Resim CAPTCHA'ları, kullanıcılardan fotoğraflardan belirli nesneleri (trafik ışıkları, yaya geçitleri, otobüsler) seçmelerini ister. Her ikisi de botları engellemeyi amaçlıyor ancak güvenlik gücü, kullanıcı deneyimi, erişilebilirlik ve otomasyon karmaşıklığı açısından farklılık gösteriyor. Bu karşılaştırma, geliştiricilerin hangi türle karşı karşıya olduklarını ve her birinin iş akışlarına nasıl entegre olduklarını anlamalarına yardımcı olur.


Metin CAPTCHA'ları nasıl çalışır?

Metin CAPTCHA'ları bozuk karakterleri resim olarak işler. Kullanıcı karakterleri okur ve bunları bir metin alanına yazar.

Ortak metin CAPTCHA teknikleri

Teknik Amaç
Karakter çarpıtması Basit OCR'yi önlemek için harfleri büker
Arka plan gürültüsü Metnin arkasına çizgiler, noktalar veya renk geçişleri ekler
Karakter örtüşmesi Segmentasyonu önlemek için bitişik harflerin üst üste binmesi
Yazı tipi rastgeleleştirme Her görev için birden fazla yazı tipi ve boyut kullanır
Renk değişimi Karakter ve arka plan renklerini rastgele hale getirir

Metin CAPTCHA akışı

Server generates random string (e.g., "X7mK9p")
    ↓
Applies distortion: warping, noise, overlap
    ↓
Renders as PNG/JPEG image
    ↓
User reads characters, types into input field
    ↓
Server compares input against stored string (case-insensitive usually)

Resim CAPTCHA'ları nasıl çalışır?

Resim CAPTCHA'ları bir fotoğraf tablosu sunar ve kullanıcıdan bir kategoriyle eşleşen görselleri seçmesini ister.

Yaygın resim CAPTCHA türleri

Tür Mücadele sağlayıcı
Izgara seçimi "Trafik ışıkları olan tüm kareleri seç" reCAPTCHA v2
Resim etiketleme "Otobüs içeren tüm görsellere tıklayın" hCaptcha
Nesne sayma "Bu resimde kaç tane bisiklet var?" Özel
Döndürme "Resmi doğru yöne döndür" FunCaptcha

Resim CAPTCHA akışı

Server selects images from a labeled dataset
    ↓
Presents 3×3 or 4×4 grid with a text prompt
    ↓
User clicks matching images
    ↓
Server validates selections against ground truth
    ↓
If fading images: new images load in place of selected ones (multi-round)

Bire bir karşılaştırma

Boyut CAPTCHA'ya kısa mesaj gönderin Resim CAPTCHA'sı
Güvenlik düzeyi Düşük — modern OCR %95'in üzerinde çözüm sağlar Yüksek - nesne tanıma gerektirir
Kullanıcının çözüm süresi 5-10 saniye 10-30 saniye
Başarısızlık oranı (insanlar) %15-20 %8-15
Erişilebilirlik Görme engelliler için kötü Görme engelliler için çok kötü
Mobil uyumluluk Orta (küçük karakterler) İyi (dokunmaya dayalı seçim)
Otomasyon zorluğu Kolay (OCR) Sert (görüntü sınıflandırması)
Dağıtım maliyeti Ücretsiz (kendi kendine barındırılan) Ücretsizden ücretliye (üçüncü taraf API)
Bot QA tanılama maliyeti 1000 kişi başına 0,50-1,00 ABD Doları 1.000 kişi başına 1,50-3,00 ABD Doları
Veri toplama Yok ML modellerini eğitebilir (reCAPTCHA)
Uygulama çabası Minimal (sunucu tarafı görüntü oluşturma) Orta (JavaScript SDK entegrasyonu)

Metin ve resim CAPTCHA'larını algılama

Python tespiti

import requests
from bs4 import BeautifulSoup
import re

def detect_captcha_type(url):
    """Detect whether page uses text or image CAPTCHA."""
    response = requests.get(url, timeout=10)
    soup = BeautifulSoup(response.text, "html.parser")
    html = response.text

    result = {"text_captcha": False, "image_captcha": False, "provider": None}

    # Check for reCAPTCHA (image-based)
    if "google.com/recaptcha" in html or "g-recaptcha" in html:
        result["image_captcha"] = True
        result["provider"] = "reCAPTCHA"
        return result

    # Check for hCaptcha (image-based)
    if "hcaptcha.com" in html or "h-captcha" in html:
        result["image_captcha"] = True
        result["provider"] = "hCaptcha"
        return result

    # Check for text CAPTCHA patterns
    captcha_images = soup.find_all("img", attrs={
        "src": re.compile(r"captcha", re.I)
    })
    captcha_inputs = soup.find_all("input", attrs={
        "name": re.compile(r"captcha", re.I)
    })

    if captcha_images and captcha_inputs:
        # Image with text input = text CAPTCHA
        result["text_captcha"] = True
        result["provider"] = "custom text CAPTCHA"
        return result

    # Check for FunCaptcha (image-based rotation)
    if "funcaptcha" in html.lower() or "arkoselabs" in html.lower():
        result["image_captcha"] = True
        result["provider"] = "FunCaptcha"
        return result

    return result

captcha = detect_captcha_type("https://staging.example.com/qa-login")
print(captcha)

Node.js tespiti

const axios = require("axios");
const cheerio = require("cheerio");

async function detectCaptchaType(url) {
    const { data: html } = await axios.get(url, { timeout: 10000 });
    const $ = cheerio.load(html);

    const result = { textCaptcha: false, imageCaptcha: false, provider: null };

    // reCAPTCHA detection
    if (html.includes("google.com/recaptcha") || html.includes("g-recaptcha")) {
        result.imageCaptcha = true;
        result.provider = "reCAPTCHA";
        return result;
    }

    // hCaptcha detection
    if (html.includes("hcaptcha.com") || html.includes("h-captcha")) {
        result.imageCaptcha = true;
        result.provider = "hCaptcha";
        return result;
    }

    // Text CAPTCHA: image + input with "captcha" in name/class
    const captchaImgs = $("img[src*='captcha' i]").length;
    const captchaInputs = $("input[name*='captcha' i]").length;

    if (captchaImgs > 0 && captchaInputs > 0) {
        result.textCaptcha = true;
        result.provider = "custom text CAPTCHA";
        return result;
    }

    return result;
}

detectCaptchaType("https://staging.example.com/qa-login").then(console.log);

CaptchaAI ile metin CAPTCHA'larını çözme

Metin CAPTCHA'ları özünde görüntü tabanlıdır; bozuk metin PNG veya JPEG olarak oluşturulur. CaptchaAI'nin Görüntü OCR API'si bunları doğrudan yönetir.

import requests
import base64
import time

API_KEY = "YOUR_API_KEY"

# Get the CAPTCHA image
captcha_url = "https://example.com/captcha.png"
image_data = requests.get(captcha_url).content
b64 = base64.b64encode(image_data).decode()

# Submit to CaptchaAI
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "base64",
    "body": b64,
    "json": 1,
})
task_id = submit.json()["request"]

# Poll for result
for _ in range(30):
    time.sleep(3)
    resp = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if resp.get("status") == 1:
        print(f"CAPTCHA text: {resp['request']}")
        break

CaptchaAI, bozuk metin, matematik denklemleri ve karakter tanıma zorlukları da dahil olmak üzere 27.500'den fazla görüntü CAPTCHA türünü destekler.


Hangi CAPTCHA türü ne zaman kullanılmalı?

Aşağıdaki durumlarda metin CAPTCHA'larını seçin:

  • Sıfır bağımlı, kendi kendine barındırılan bir çözüme ihtiyacınız var
  • Kullanıcı tabanınızın erişilebilirlik gereksinimleri var (metin CAPTCHA'larının ses alternatifleri olabilir)
  • Bot trafiği düşük ve temel spam engellemeye ihtiyacınız var
  • Üçüncü tarafların veri toplamasını önlemek istiyorsunuz

Aşağıdaki durumlarda resim CAPTCHA'larını seçin:

  • Güçlü bot korumasına ihtiyacınız var
  • Uygulamanız hassas verileri (giriş yapma, ödemeler) işliyor
  • Daha yüksek kullanıcı sürtünmesini kabul edebilirsiniz
  • Sürekli güncellemelere sahip yönetilen bir çözüm istiyorsunuz

Şu durumlarda ikisini de seçin:

  • Görünmez CAPTCHA'lar (reCAPTCHA v3, Cloudflare Turnstile) trafiğinizi herhangi bir kullanıcı etkileşimi olmadan yönetebilir

Sık sorulan sorular

Hangi CAPTCHA türü daha erişilebilir?

Her iki türe de gerçekten erişilemez. Metin CAPTCHA'ları, bir ses alternatifi sunulmadığı sürece görme engelli kullanıcılar için zordur. Resim CAPTCHA'ları daha kötüdür; ızgara seçimi görevleri ekran okuyucularla kullanılamaz. Görünmez CAPTCHA'lar (reCAPTCHA v3, Cloudflare Turnstile) en erişilebilir seçenektir çünkü kullanıcı etkileşimi gerektirmezler.

Metin CAPTCHA'ları 2025'te hâlâ etkili mi?

Hayır. Modern OCR motorları standart metin CAPTCHA'larını %95'in üzerinde doğrulukla çözer. Büyük ölçüde bozulmuş metin CAPTCHA'ları bunu %80-85'e düşürebilir, ancak bunun bedeli insan tarafından okunabilirlik olur. Metin CAPTCHA'ları artık botlardan daha meşru kullanıcıları engelliyor.

Bir API ile hangi türü çözmek daha ucuzdur?

Metin CAPTCHA'ları daha ucuzdur. OCR tabanlı çözümlemenin maliyeti 1000 çözüm başına yaklaşık 0,50 ila 1,00 ABD dolarıdır. Görüntü CAPTCHA'ları (reCAPTCHA, hCaptcha), daha karmaşık işlemler gerektirdiklerinden 1.000 çözüm başına 1,50 ila 3,00 ABD Doları tutarındadır.

CaptchaAI hem metin hem de resim CAPTCHA'larını çözebilir mi?

Evet. CaptchaAI, metin CAPTCHA'larını Görüntü OCR API'si (27.500'den fazla tür desteklenir) aracılığıyla ve görüntü CAPTCHA'larını reCAPTCHA, hCaptcha ve ızgara görüntü çözücüleri aracılığıyla çözer.


Özet

Metin CAPTCHA'ları basit, dağıtımı ucuz ve OCR ile atlanması kolaydır. Resim CAPTCHA'larının otomatikleştirilmesi daha zordur ve daha yüksek kullanıcı sürtünmesi pahasına daha güçlü bot koruması sağlar. Otomasyon iş akışları oluşturan geliştiriciler için metin CAPTCHA'ları yalnızca OCR gerektirir (kolaycaCaptchaAI'nin Görüntü OCR'ı), görüntü CAPTCHA'ları ise CaptchaAI'nin reCAPTCHA veya hCaptcha API'leri gibi özel çözücüler gerektirir. 2025'te trend, kullanıcı sürtünmesini tamamen ortadan kaldıran görünmez CAPTCHA'lara yöneliyor.

İlgili Makaleler

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