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.