Güvenli kapsam: Bu rehber yalnızca size ait veya yetkilendirilmiş QA, staging ve ön üretim ortamları içindir. Anlatılan her şey kendi CAPTCHA entegrasyonunuzu tanılama, test etme ve gözlemleme kalıplarıyla ilgilidir — üçüncü taraf siteler ya da yetkisiz akışlar kapsam dışıdır. Kendi kopyanızdan bile veri topluyorsanız, kişisel veriler KVKK kapsamına girebilir; yetkilendirilmiş iş akışlarında kalın.
Kendi staging login sayfanıza eklediğiniz reCAPTCHA veya Turnstile widget'ının canlıya çıkmadan doğru çalıştığını nasıl doğrularsınız? Tam bir tarayıcı açmadan: sayfanın HTML'ini BeautifulSoup ile ayrıştırıp sitekey'i çıkarın, CaptchaAI ile bir token üretin ve bu token'ı kendi backend'inizde kontrol edin. requests + BeautifulSoup ikilisi, tarayıcı başlatma ve JavaScript yürütme maliyeti olmadığından her sayfa için hızlı ve tekrarlanabilir bir QA adımı verir.
Sunucu tarafında render edilen HTML ne zaman yeterli?
Bu yaklaşım, sayfanız HTML'i doğrudan sunduğunda (server-side rendering) çalışır. Widget data-sitekey niteliğiyle birlikte ilk yanıtta geliyorsa, BeautifulSoup onu görebilir. Widget yalnızca JavaScript çalıştıktan sonra DOM'a ekleniyorsa (tek sayfa uygulamaları, dinamik yükleme), requests ile gelen ham HTML'de görünmez — bu durumda staging testinizi Selenium veya Playwright ile kurun. QA açısından pratik kural: önce requests ile sayfayı çekin ve sitekey'i bulup bulamadığınıza bakın; bulamıyorsanız widget JS ile yükleniyor demektir ve headless bir tarayıcıya geçmeniz gerekir.
Adım 1: Widget'ı ve gizli form alanlarını HTML'den çıkarın
Kendi staging'inizden kaydettiğiniz HTML üzerinde stabil seçicilerle ilerleyin. İki widget ailesi için de data-sitekey niteliği anahtardır:
- reCAPTCHA:
.g-recaptchadiv'i veya herhangi bir[data-sitekey]öğesi; çözüm sonrası token, formdakig-recaptcha-responsealanına yazılır. - Turnstile:
.cf-turnstilediv'i; token,cf-turnstile-responsealanına yazılır.
Sadece sitekey'i almak yeterli değildir. Gerçek bir login formu, sunucunun beklediği gizli alanları da taşır — CSRF token'ları ve oturuma özel değerler gibi. input[type="hidden"] alanlarını mutlaka toplayın; QA'da en sık görülen "form login sayfasına geri dönüyor" belirtisi, eksik CSRF alanından kaynaklanır. Bu adımda amaç, gerçek tarayıcının formu gönderirken kullandığı tüm alanları eksiksiz yeniden üretmektir.
Adım 2: sitekey ve pageurl ile CaptchaAI'da çözün
Çıkardığınız sitekey ve staging sayfanızın pageurl değerini CaptchaAI'ya bir görev olarak gönderin, ardından hazır olana kadar sonucu sorgulayın. İki uç nokta biçimini de kullanabilirsiniz: aşağıdaki örnekteki createTask / getTaskResult akışı ya da klasik in.php / res.php uç noktaları. Her ikisinde de mantık aynıdır — görevi gönderirsiniz, bir görev kimliği alırsınız ve periyodik sorgulama ile token'ı çekersiniz.
CaptchaAI, reCAPTCHA v2/v3, Cloudflare Turnstile ve Challenge, GeeTest v3, görüntü/OCR ve BLS gibi türleri destekler; CaptchaFox (beta), Friendly Captcha (beta) ve Lemin (beta) beta aşamasındadır. Staging widget'ınız bu türlerden biriyse, çözüm adımını olduğu gibi test edebilirsiniz.
Adım 3: Token'ı kendi backend'inizde doğrulayın
Token'ı üretmek işin yarısıdır; asıl QA değeri onu kendi doğrulama uç noktanıza gönderip sonucu görmektir. Token'ı ilgili form alanına (g-recaptcha-response veya cf-turnstile-response) yerleştirin, formu requests.Session() ile gönderin ve dönen yanıtı BeautifulSoup ile ayrıştırarak beklediğiniz "başarılı" durumunu doğrulayın. Oturum çerezleri istekler arasında korunması için mutlaka aynı Session nesnesini kullanın — QA'da "çerezler kayboluyor" belirtisi neredeyse her zaman ayrı ayrı isteklerden kaynaklanır.
Örnek: kendi staging login akışınızı test etmek
Türkiye'deki ekiplerin en çok test ettiği senaryolardan biri e-ticaret login veya ödeme adımıdır. Aşağıdaki minimal Python örneği, kendi staging ortamınızdaki bir CAPTCHA widget'ını CaptchaAI üzerinden uçtan uca test etmek için kullanılan akışı gösterir. URL ve sitekey değerleri ortam değişkeninden gelir; hiçbir gerçek üretim adresi ya da anahtar koda gömülmez.
import os
import requests
API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL'] # ör. https://staging.example.com/qa-login
QA_SITE_KEY = os.environ['QA_SITE_KEY']
def submit_qa_recaptcha() -> str:
payload = {
'clientKey': API_KEY,
'task': {
'type': 'NoCaptchaTaskProxyless',
'websiteURL': QA_PAGE_URL,
'websiteKey': QA_SITE_KEY,
},
}
response = requests.post(
'https://api.captchaai.com/createTask',
json=payload,
timeout=30,
)
response.raise_for_status()
return response.json()['taskId']
def fetch_qa_result(task_id: str) -> dict:
payload = {'clientKey': API_KEY, 'taskId': task_id}
response = requests.post(
'https://api.captchaai.com/getTaskResult',
json=payload,
timeout=30,
)
response.raise_for_status()
return response.json()
Gözlemlenebilirlik ve yapılandırılmış günlükler
Her QA çalıştırması için yapılandırılmış günlükler üretin. Toplam token süresi, HTTP yanıt kodu, görev kimliği ve kuyruk derinliği gibi ölçümler tablolarınızı ve uyarılarınızı besler. Ortamlarınızı (geliştirme, staging, ön üretim) ayrı kanallara yazın ve dağıtık izleme (örneğin OpenTelemetry) ile bağıntı kimliklerini eşleştirin. Tek bir bağıntı kimliğinden tüm senaryoyu yeniden oynatabilmek, bir olay sırasında tanılama süresini belirgin biçimde kısaltır. Zamanla bu günlükler, çözüm süresindeki kaymaları veya sitekey değişikliklerini canlıya yansımadan yakalamanızı sağlar.
Yayına almadan önce QA kontrol listesi
- Kapsam kesinlikle kendi uygulamalarınız veya yetkilendirilmiş kaynaklarla sınırlıdır.
- CaptchaAI anahtarı CI gizli deposunda veya kasada saklanır, kaynak kodda asla bulunmaz.
- Her çalıştırma için çağrı süresi ve HTTP yanıt kodu kayıt altına alınır.
- Geçici hatalar için idempotent bir yeniden deneme stratejisi kuruludur.
- Testler sürekli entegrasyon ortamınızdan tekrarlanabilir biçimde yeniden oynatılır.
Sorun giderme
| Belirti | Olası neden | Çözüm |
|---|---|---|
sitekey çıkarımı None dönüyor |
Widget JavaScript ile yükleniyor | Staging testini Selenium/Playwright ile kurun |
| Form gönderimi login sayfasına geri dönüyor | Eksik CSRF veya gizli alan | Tüm input[type="hidden"] alanlarını toplayın |
| Gönderimden sonra 403 | Başlık tabanlı bot tespiti | Gerçekçi User-Agent ve Referer başlıkları ekleyin |
| Backend QA token'ı reddediyor | Yanlış pageurl veya sitekey |
Değerleri gerçek staging yapılandırmasıyla karşılaştırın |
CaptchaAI ERROR_NO_SLOT_AVAILABLE döndürüyor |
Anlık thread doygunluğu | Üstel geri çekilme (exponential backoff) ile yeniden deneyin |
Planlar ve öngörülebilir maliyet
CaptchaAI thread tabanlı fiyatlandırır: her plan, faturalandırma ayı boyunca thread başına sınırsız çözüm içerir. En küçük plan BASIC ($15/ay, 5 thread) ile başlar; QA hacminiz büyüdükçe daha yüksek thread sayılı planlara geçebilirsiniz. TL kurundaki dalgalanmalar göz önüne alındığında, thread başına sabit USD fiyatlandırma Türkiye'deki ekipler için aylık maliyeti öngörülebilir kılar — çözüm başına ücret ya da tür bazlı ek ücret yoktur.
Sık sorulan sorular
BeautifulSoup CAPTCHA'yı kendisi çözer mi?
Hayır. BeautifulSoup bir HTML ayrıştırıcısıdır; yalnızca sitekey, görüntü URL'si ve form alanları gibi parametreleri çıkarır. Asıl çözümü CaptchaAI yapar, HTTP iletişimini de requests yürütür.
Bu akış kendi staging ortamımın dışına çıkar mı?
Hayır. Tüm örnekler staging.example.com gibi size ait veya yetkilendirilmiş ortamları varsayar. Üretimdeki CAPTCHA korumasını kendi staging kopyanızda yeniden üretip orada test edin.
API anahtarımı doğrudan kodda tutabilir miyim?
Hayır. Anahtarı CI gizli yöneticisi, ortam değişkeni veya kasa hizmeti üzerinden enjekte edin. Depoya işlenmiş bir anahtar derhal döndürülmelidir.
Geçici hatalar için hangi yeniden deneme stratejisini öneriyorsunuz?
İdempotent yeniden deneme: üstel geri çekilme (exponential backoff, örneğin 1s, 2s, 4s) ve bir üst sınırla. Ağ hataları, 5xx yanıtları ve ERROR_NO_SLOT_AVAILABLE için yeniden deneme uygundur; kalıcı kimlik doğrulama hataları için değildir.
Widget'ı HTML'de bulamıyorsam ne yapmalıyım?
Muhtemelen JavaScript ile yükleniyordur. requests ile gelen ham HTML'de data-sitekey yoksa, staging testinizi headless bir tarayıcıyla (Selenium/Playwright) çalıştırın.
Güvenli ilgili kılavuzlar
- CaptchaAI ile ilk API çağrınıza başlayın
- Yetkili ortamlarda CAPTCHA QA testleri
- Kendi web formlarınızda CAPTCHA uç noktası testleri
- Tarayıcı testi başarısız ama API başarılı olduğunda hata ayıklama
- reCAPTCHA v2'yi API ile çözme
- Cloudflare Turnstile'ı API ile çözme
- GeeTest v3'ü API ile çözme
CAPTCHA entegrasyonunuzu kendi ortamınızda CaptchaAI ile doğrulayın.