Cloudflare Turnstile, gizliliğe odaklı, arka planda sessizce çalışan bir CAPTCHA alternatifidir. Geleneksel CAPTCHA'ların aksine nadiren görünür bir meydan okuma sunar; tarayıcı sinyallerini toplayıp bir token üretir ve bu token sitenin arka ucu tarafından doğrulanır.
Bu kılavuz, CaptchaAI API'si ile Turnstile'ı nasıl programatik olarak çözeceğinizi gösterir. Henüz okumadıysanız önce CaptchaAI Hızlı Başlangıç yazısını inceleyin; oradaki 4 adımlı genel akışı bilmek burayı kolaylaştırır.
Gereksinimler
| Öğ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+ |
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:
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 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>"}. Sorgulama için task_id'yi saklayın.
Adım 3: Sonucu sorgulayın
Turnstile genellikle 10–25 saniyede çözülür. 10 saniye bekleyin, ardından her 5 saniyede bir maksimum 40 kez sorgulayın:
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])
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.
Tam Python örneği
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"))
Sık karşılaşılan hatalar
| Kod | Anlamı | Yapılacak |
|---|---|---|
ERROR_WRONG_USER_KEY |
Geçersiz API anahtarı biçimi | CAPTCHAAI_KEY'in tamamlandığı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 |
Tam hata tablosu için reCAPTCHA v2 kılavuzuna bakın.
Çalışmadığında
- Dinamik sitekey. Bazı Cloudflare sitelerinde sitekey her ziyarette değişir; her görev öncesinde sayfayı yeniden çekin.
- 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 tekrar çözmeniz gerekir.
- Proxy kalitesi. Ucuz datacenter IP'leri ek meydan okumaları tetikler. Konut veya kendi sunucu altyapınız tercih edin.
Sıradaki adımlar
- Genel akış için CaptchaAI Hızlı Başlangıç yazısını okuyun
- Sık karşılaşılan başka bir senaryo olan reCAPTCHA v2 kılavuzunu inceleyin
- captchaai.com üzerinden kaydolup API anahtarınızı alın ve Turnstile çözmeye başlayın
CaptchaAI'a bugün kaydolun ve Turnstile çözmeye başlayın.