Kısa cevap: karşınızdaki form bozuk harfleri yazdırıyorsa iş yükünüz bir OCR problemidir; trafik ışığı karesi seçtiriyorsa görüntü sınıflandırma problemidir. Bu ayrım entegrasyon süresini, kullanıcı sürtünmesini ve aylık faturanızı belirler — aşağıda karar tablosu, maliyet mantığı ve türü ölçen çalışan bir tespit kodu var.
Karar tablosu: iki tür yan yana
| Boyut | Metin CAPTCHA | Resim CAPTCHA |
|---|---|---|
| Güvenlik düzeyi | Düşük — güncel OCR motorları için kolay hedef | Yüksek — nesne tanıma gerektirir |
| Kullanıcının çözüm süresi | 5–10 saniye | 10–30 saniye |
| İnsan hata oranı | %15–20 | %8–15 |
| Erişilebilirlik | Görme engelli kullanıcılar için zor | Daha da zor (ekran okuyucuyla kullanılamaz) |
| Mobil uyum | Orta (karakterler küçük kalır) | İyi (dokunmayla seçim) |
| Otomasyon zorluğu | Kolay (OCR) | Zor (görüntü sınıflandırma) |
| Kurulum maliyeti | Ücretsiz (kendi sunucunuzda) | Ücretsizden ücretliye (üçüncü taraf SDK) |
| Uygulama eforu | Az (sunucu tarafı görsel üretimi) | Orta (JavaScript SDK) |
| Veri toplama | Yok | ML modeli eğitebilir (reCAPTCHA) |
Aşağıdaki değerler gözlemlenen verilere ve kullanıcı raporlarına dayanır. Sonuçlar ortama, hacme ve zamana göre değişebilir.
Maliyet ve thread mantığı
Çözüm servislerinin çoğu çözüm başına ücretlendirir; bu modelde metin CAPTCHA'ları 1.000 çözüm başına yaklaşık $0,50–$1,00, resim CAPTCHA'ları $1,50–$3,00 bandında kalır. CaptchaAI'nin modeli farklıdır: fatura çözüm başına değil, eşzamanlı thread üzerinden çıkar. BASIC ($15/ay, 5 thread) ile başlayıp ADVANCE ($90/ay, 50 thread) ile ölçekleyebilirsiniz.
Gelirin TL, altyapı giderinin USD olduğu ekipler için bunun pratik bir karşılığı var: sabit aylık kalem, hacme göre dalgalanan çözüm başına faturadan çok daha kolay bütçelenir. QA koşularınız üç katına çıksa da plan bedeli aynı kalır.
Metin CAPTCHA'ları içeride nasıl çalışır?
Sunucu rastgele bir karakter dizisi üretir, bunu bozarak PNG veya JPEG olarak yayınlar; kullanıcı okuduğunu bir metin alanına yazar ve sunucu iki dizeyi karşılaştırır. Bozma teknikleri şunlardır:
| Teknik | Amaç |
|---|---|
| Karakter çarpıtması | Basit OCR'yi zorlaştırmak için harfleri büker |
| Arka plan gürültüsü | Metnin arkasına çizgi, nokta veya renk geçişi ekler |
| Karakter örtüşmesi | Segmentasyonu engellemek için harfleri üst üste bindirir |
| Yazı tipi rastgeleleştirme | Her doğrulamada farklı yazı tipi ve boyut kullanır |
| Renk değişimi | Karakter ve arka plan renklerini rastgele seçer |
Ortak açmaz şudur: bozma seviyesi arttıkça makine doğruluğu düşer, ama insan doğruluğu daha hızlı düşer — ağır bozulmuş bir CAPTCHA botlardan çok gerçek kullanıcıyı takar.
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ı içeride nasıl çalışır?
Resim CAPTCHA'ları etiketli bir veri kümesinden fotoğraf seçer, 3×3 veya 4×4 ızgara halinde sunar ve seçimleri referans etiketlerle karşılaştırır. Bazı uygulamalarda seçilen kare silinip yerine yenisi yüklenir; doğrulama tek turda bitmez. Karşılaşacağınız biçimler:
| Tür | Doğrulama | Sağlayıcı |
|---|---|---|
| Izgara seçimi | "Trafik ışığı olan tüm kareleri seçin" | reCAPTCHA v2 |
| Resim etiketleme | "Otobüs içeren tüm görsellere tıklayın" | hCaptcha |
| Nesne sayma | "Bu görselde kaç bisiklet var?" | Özel çözümler |
| Döndürme | "Görseli doğru yöne çevirin" | FunCaptcha |
hCaptcha ve FunCaptcha (Arkose Labs) türlerini CaptchaAI henüz desteklemiyor; tabloda yalnızca karşılaşabileceğiniz biçimler olarak yer alıyorlar.
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)
Hangi türle karşı karşıyasınız? Tespit kodu
Karar vermeden önce sayfanın hangi aileyi kullandığını ölçün. Aşağıdaki iki örnek staging ortamınızdaki bir formu sorgular ve türü döndürür.
Python ile tespit
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 ile tespit
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);
Sonuç text_captcha: true dönüyorsa iş bir OCR görevine indirgenir. image_captcha ve bir sağlayıcı adı dönüyorsa, reCAPTCHA v2 ya da Turnstile gibi sağlayıcıya özel bir akış gerekir.
Metin CAPTCHA'sını CaptchaAI ile çözme
Metin CAPTCHA'sı özünde bir görseldir: ayrı bir sitekey ya da tarayıcı oturumu gerekmez, görseli base64 gönderip metni geri alırsınız.
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'nin görüntü/OCR tarafı bozuk metin, matematik ifadeleri ve karakter tanıma dahil 27.500'den fazla görüntü CAPTCHA türünü kapsar. Servis genelinde 12 genel tür ile 3 beta tür — CaptchaFox (beta), Friendly Captcha (beta), Lemin (beta) — desteklenir.
Site sahibi olarak hangisini koyarsınız?
Metin CAPTCHA'sı: dış bağımlılık istemiyorsanız, bot trafiği düşükse ve amacınız temel spam engeliyse. Ses alternatifi eklenebilmesi erişilebilirlik açısından tek gerçek avantajıdır.
Resim CAPTCHA'sı: giriş ya da ödeme gibi hassas akışları koruyorsanız ve sürekli güncellenen yönetilen bir servis istiyorsanız.
Hiçbiri: trafiğiniz görünmez doğrulamalarla (reCAPTCHA v3, Cloudflare Turnstile) yönetilebiliyorsa. Kullanıcıya hiçbir şey tıklatmadan risk skoru üreten bu yaklaşım, ödeme adımı gibi dönüşümün kritik olduğu sayfalarda tercih edilen yön oldu.
Yerel bir senaryo
İstanbul'da bir e-ticaret ekibi ödeme akışını gece koşan regresyon testleriyle doğruluyor: kayıt formunda klasik metin CAPTCHA'sı, ödeme adımında Turnstile var. Doğru kurgu ikisini ayırmaktır — kayıt adımı OCR uç noktasına, ödeme adımı Turnstile akışına gider. Test verisinde +90 telefon formatı ve Europe/Istanbul saat dilimi koşulları gerçeğe yaklaştırır. Veri gerçek kişilere aitse KVKK kapsamına girer; akışları yetkili QA süreçleriyle sınırlayın.
Sık sorulan sorular
Sayfada hangi CAPTCHA türü olduğunu koda bakmadan anlayabilir miyim?
Çoğu zaman evet. Sayfa kaynağında google.com/recaptcha ya da hcaptcha.com geçiyorsa resim tabanlı bir doğrulamadasınız. src veya name alanında "captcha" geçen bir <img> ile <input> çiftini birlikte görüyorsanız, klasik metin CAPTCHA'sı vardır.
CaptchaAI hCaptcha'yı destekliyor mu?
Hayır. hCaptcha ve FunCaptcha (Arkose Labs) desteklenmiyor; GeeTest v4 için "çok yakında" ifadesi geçerli. Desteklenen taraf reCAPTCHA v2/v3 (Enterprise dahil), Cloudflare Turnstile, GeeTest v3, görüntü/OCR, ızgara görüntü ve BLS; ayrıca CaptchaFox, Friendly Captcha ve Lemin beta olarak sunuluyor.
Aylık maliyeti nasıl hesaplarım?
CaptchaAI'de çözüm başına ücret yoktur; ödediğiniz şey eşzamanlı thread sayısıdır. Hesap "ayda kaç çözüm" değil, "aynı anda kaç iş" sorusuyla yapılır: gece koşan 5 paralel test işi için BASIC ($15/ay, 5 thread) yeterlidir, sürekli çalışan bir toplu işlem hattı için ADVANCE ($90/ay, 50 thread) daha uygun eşiktir.
Metin CAPTCHA'ları hâlâ işe yarıyor mu?
Bot tarafında caydırıcılığı büyük ölçüde azaldı; günümüz OCR motorları standart bozulmalı metinleri yüksek doğrulukla okuyor. Bugün metin CAPTCHA'sı düşük riskli formlarda basit spam filtresi olarak anlamlıdır, kritik akışlarda değil.
Özet
Metin CAPTCHA'ları kurulumu ucuz, otomasyonu kolay ve koruması zayıftır; resim CAPTCHA'ları daha güçlü koruma sağlar ama kullanıcıyı yorar. Bu ayrım doğrudan mimariye yansır: metin CAPTCHA'sı tek bir OCR çağrısıyla (CaptchaAI görüntü/OCR tarafı) biterken, resim tabanlı doğrulamalar sağlayıcıya özel akışlar ister. Yön net: kullanıcı sürtünmesini kaldıran görünmez doğrulamalar.