Turnstile'ı API ile çözmek üç adıma iner: sayfadan sitekey'i çıkarın, CaptchaAI'a bir görev gönderin, dönen token'ı formdaki cf-turnstile-response alanına yazın. Bu kılavuz her adımı Python ve Node.js örnekleriyle gösterir, sonunda kopyalayıp çalıştırabileceğiniz tam bir betik verir.
Cloudflare Turnstile, arka planda sessizce çalışan, gizliliğe odaklı bir CAPTCHA alternatifidir. Klasik CAPTCHA'ların aksine kullanıcıya nadiren görünür bir adım gösterir; bunun yerine tarayıcı sinyallerini toplayıp bir token üretir ve sitenin arka ucu bu token'ı doğrular. Sizin otomasyonunuzun görevi, geçerli bir token elde edip onu isteğe eklemektir.
Genel API akışını (görev gönder → sonucu sorgula → token'ı kullan) daha önce görmediyseniz, önce 4 adımlı Hızlı Başlangıç rehberini okumanız buradaki adımları tanıdık kılar.
Başlamadan önce gerekenler
| Öğe | Değer |
|---|---|
| CaptchaAI API anahtarı | captchaai.com panelinden |
| Turnstile sitekey | Hedef sayfadan çıkarılır (0x ile başlar) |
| Sayfa URL'si | Turnstile'ın göründüğü tam URL |
| Dil | Python 3.7+ veya Node.js 14+ |
Turnstile, CaptchaAI'ın genel kullanıma açık (method=turnstile) çözüm tiplerinden biridir ve panelde tanımlı thread sayınız dahilinde ek bir ücret olmadan çözülür.
Adım 1: Turnstile sitekey'i bulun
Sitekey genellikle sayfa HTML'inde, bir div veya script etiketinin içindedir:
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQFLr1GavNl"></div>
Veya JavaScript tarafından çizilir:
turnstile.render('#widget', {
sitekey: '0x4AAAAAAAC3DHQFLr1GavNl',
callback: function(token) { /* ... */ }
});
Üç çıkarım yöntemi:
- Tarayıcı DevTools — Elements sekmesinde
data-sitekeyveyacf-turnstilearayın. - Kaynak kod —
Ctrl+Uile sayfa kaynağını açıp0xile başlayan dizeleri arayın. - Network sekmesi —
challenges.cloudflare.comfiltresi koyun; sitekey istek parametrelerinde geçer.
Turnstile sitekey'i her zaman
0xile başlar ve genellikle 22 karakter uzunluğundadır. Bu,6Lile başlayan reCAPTCHA anahtarlarından temel farkıdır.
Adım 2: Görevi gönderin
https://ocr.captchaai.com/in.php adresine method=turnstile ile POST atın.
Python
import requests
API_KEY = "YOUR_CAPTCHAAI_KEY"
SITEKEY = "0x4AAAAAAAC3DHQFLr1GavNl"
PAGEURL = "https://staging.example.com/qa-login"
r = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": SITEKEY,
"pageurl": PAGEURL,
"json": 1,
})
data = r.json()
if data["status"] != 1:
raise RuntimeError(f"submit failed: {data}")
task_id = data["request"]
print("task id:", task_id)
Node.js
Aynı isteğin Node.js karşılığı:
const axios = require("axios");
const { data } = await axios.post("https://ocr.captchaai.com/in.php", null, {
params: {
key: process.env.CAPTCHAAI_KEY,
method: "turnstile",
sitekey: "0x4AAAAAAAC3DHQFLr1GavNl",
pageurl: "https://staging.example.com/qa-login",
json: 1,
},
});
if (data.status !== 1) throw new Error(`submit failed: ${JSON.stringify(data)}`);
const taskId = data.request;
Başarılı yanıt {"status": 1, "request": "<task_id>"} biçimindedir. Sorgulama adımı için task_id'yi saklayın. Bir e-ticaret QA senaryosunda, pageurl olarak canlı mağazanızı değil staging.example.com/qa-login gibi bir hazırlık ortamı adresini kullanın; sitekey ve pageurl birebir eşleşmediğinde arka uç token'ı reddeder.
Adım 3: Sonucu sorgulayın
CaptchaAI, Turnstile'ı genellikle 10 saniyenin altında çözer; yine de kuyruk ve ağ gecikmesi için önce 10 saniye bekleyip ardından her 5 saniyede bir, en fazla 40 kez sorgulamak güvenli bir yaklaşımdır:
import time
time.sleep(10)
for _ in range(40):
r = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
res = r.json()
if res["status"] == 1:
token = res["request"]
break
if res["request"] != "CAPCHA_NOT_READY":
raise RuntimeError(f"solver error: {res}")
time.sleep(5)
else:
raise TimeoutError("turnstile solving timed out")
print("token (ilk 60 karakter):", token[:60])
CAPCHA_NOT_READY yanıtı hata değildir; çözüm henüz hazır değil demektir, döngü devam eder. Dönen token genellikle 0. ile başlayan, 400–600 karakter uzunluğunda bir Base64 dizesidir.
Adım 4: Token'ı sayfaya enjekte edin
Token elinize geçtikten sonra, Turnstile formundaki gizli cf-turnstile-response alanına yazın ve formu gönderin.
Selenium:
driver.execute_script(
"document.querySelector('[name=cf-turnstile-response]').value = arguments[0];",
token,
)
driver.find_element("css selector", "form").submit()
Playwright:
page.evaluate(
"(t) => document.querySelector('[name=cf-turnstile-response]').value = t",
token,
)
page.click("button[type=submit]")
Saf HTTP: cf-turnstile-response=<token> alanını application/x-www-form-urlencoded gövdesine ekleyin.
Turnstile token'ının ömrü yaklaşık 120–300 saniyedir. Aldıktan hemen sonra kullanın, aksi halde arka uç
timeout-or-duplicatehatası döner.
Uçtan uca çalışan Python örneği
Aşağıdaki fonksiyon üç adımı tek yerde toplar — gönderme, sorgulama ve zaman aşımı yönetimi:
import os, time, requests
API = "https://ocr.captchaai.com"
KEY = os.environ["CAPTCHAAI_KEY"]
def solve_turnstile(sitekey: str, pageurl: str) -> str:
r = requests.post(f"{API}/in.php", data={
"key": KEY, "method": "turnstile",
"sitekey": sitekey, "pageurl": pageurl, "json": 1,
}, timeout=30)
j = r.json()
if j["status"] != 1:
raise RuntimeError(f"submit: {j}")
tid = j["request"]
time.sleep(10)
for _ in range(40):
r = requests.get(f"{API}/res.php", params={
"key": KEY, "action": "get", "id": tid, "json": 1,
}, timeout=30)
j = r.json()
if j["status"] == 1:
return j["request"]
if j["request"] != "CAPCHA_NOT_READY":
raise RuntimeError(f"poll: {j}")
time.sleep(5)
raise TimeoutError("timeout")
if __name__ == "__main__":
print(solve_turnstile("0x4AAAAAAAC3DHQFLr1GavNl", "https://staging.example.com/qa-login"))
API anahtarınızı koda gömmek yerine CAPTCHAAI_KEY ortam değişkeninden okuyun; bu, anahtarın yanlışlıkla sürüm kontrolüne düşmesini önler.
Sık karşılaşılan hatalar
| Kod | Anlamı | Yapılacak |
|---|---|---|
ERROR_WRONG_USER_KEY |
Geçersiz API anahtarı biçimi | CAPTCHAAI_KEY'in tam kopyalandığından emin olun |
ERROR_KEY_DOES_NOT_EXIST |
Anahtar bulunamadı | Panelden anahtarı yeniden kopyalayın |
ERROR_ZERO_BALANCE |
Sıfır bakiye | Hesabınıza yükleme yapıp tekrar deneyin |
ERROR_PAGEURL |
pageurl parametresi eksik | https:// dahil tam URL'yi gönderin |
ERROR_CAPTCHA_UNSOLVABLE |
Çözüm başarısız | sitekey ve pageurl'in eşleştiğinden emin olun, bir kez daha deneyin |
Tüm hata kodlarının açıklaması için reCAPTCHA v2 API rehberindeki hata tablosuna bakın; kodlar iki çözüm tipinde de aynıdır.
Çözüm dönmediğinde nereye bakmalı
- Dinamik sitekey. Bazı Cloudflare sitelerinde sitekey her ziyarette değişir; her görev öncesinde sayfayı yeniden çekip anahtarı taze okuyun.
- Tam pageurl. Turnstile arka ucu URL'yi sıkı kontrol eder; query string olmadan tam yolu gönderin.
- TLS test profil yapılandırması. Cloudflare istemciyi TLS imzasına göre reddedebilir.
curl_cffi, Playwright veya gerçek bir tarayıcı kullanın. - Süresi dolmuş token. 2 dakika içinde kullanın, yoksa yeniden çözmeniz gerekir.
- Proxy yapılandırması. Düşük kaliteli veri merkezi IP'leri ek doğrulama adımlarını tetikleyebilir; kararlı bir proxy yapılandırması veya kendi sunucu altyapınız daha tutarlı sonuç verir.
Sık sorulan sorular
Turnstile'ı çözmek için hangi CaptchaAI planı yeterli?
Tüm planlar Turnstile'ı çözer; fark eşzamanlı thread sayısındadır. Tek betikli, sıralı bir iş akışı için BASIC ($15/ay, 5 thread) yeterlidir. QA sırasında paralel çok sayıda istek atıyorsanız ADVANCE ($90/ay, 50 thread) gibi daha yüksek thread'li bir plan gecikmeyi düşürür. Fiyatlar USD'dir ve thread başına çözüm sınırsızdır.
cf-turnstile-response alanını sayfada bulamıyorsam ne yapmalıyım?
Turnstile bu gizli alanı çoğu zaman JavaScript ile widget yüklendiğinde ekler. Alanı statik HTML'de göremiyorsanız, token'ı Adım 4'teki gibi document.querySelector ile enjekte edin; alan yoksa formu göndermeden önce siz oluşturabilirsiniz.
Sitekey her ziyarette değişiyorsa otomasyonum nasıl kararlı kalır?
Sitekey'i sabit bir değer olarak saklamayın. Her görev döngüsünün başında sayfayı çekip 0x ile başlayan güncel değeri ayrıştırın, sonra o değerle görev gönderin. Böylece Cloudflare anahtarı döndürse bile akışınız bozulmaz.
CaptchaAI hangi Cloudflare ürünlerini çözer, hCaptcha destekleniyor mu?
CaptchaAI hem Cloudflare Turnstile hem de Cloudflare Challenge (tam sayfa "tarayıcınız kontrol ediliyor" akışı) tiplerini çözer. hCaptcha ise henüz desteklenmiyor; hCaptcha kullanan bir sayfa için bu yöntem uygun değildir.
Token'ı aldıktan sonra ne kadar sürede kullanmalıyım?
Turnstile token'larının ömrü kısadır (yaklaşık 120–300 saniye). Token'ı aldıktan hemen sonra hedef isteğe ekleyin; beklerseniz arka uç timeout-or-duplicate döndürür ve yeniden çözmeniz gerekir.
Sıradaki adımlar
- Genel görev-gönder-sorgula akışını tazelemek için CaptchaAI Hızlı Başlangıç rehberine dönün.
- Aynı akışı reCAPTCHA için uygulamak isterseniz reCAPTCHA v2 API rehberini inceleyin.
- Henüz hesabınız yoksa captchaai.com üzerinden kaydolup API anahtarınızı alın ve Turnstile çözmeye başlayın.
Ücretsiz hesabınızı açın, API anahtarınızı alın ve ilk Turnstile token'ınızı dakikalar içinde çözün.