Cloudflare Turnstile en hızlı büyüyen CAPTCHA alternatifidir. CaptchaAI ile çözmek için site anahtarına ve sayfa URL'sine ihtiyacınız var. Bu kılavuz, basit DOM sorgularından JavaScript oluşturma çağrılarını engellemeye kadar site anahtarını bulmanın her yolunu kapsar.
Turnstile site anahtarlarının yaşadığı yer
Turnstile site anahtarları üç yerde görünür:
.cf-turnstileöğelerindekidata-sitekeyözelliğiturnstile.render()JavaScript çağrısı- Turnstile iframe
srcURL'si
Yöntem 1: DOM özelliği
// Browser console
document.querySelectorAll('.cf-turnstile').forEach((el, i) => {
console.log(`Turnstile ${i}:`, {
sitekey: el.getAttribute('data-sitekey'),
action: el.getAttribute('data-action'),
cData: el.getAttribute('data-cdata'),
theme: el.getAttribute('data-theme'),
});
});
Python (statik HTML)
import re
import requests
html = requests.get("https://staging.example.com/qa-login").text
matches = re.findall(
r'class=["\'][^"\']*cf-turnstile[^"\']*["\'][^>]*data-sitekey=["\']([^"\']+)',
html
)
for sk in matches:
print(f"Sitekey: {sk}")
Python (Selenyum)
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://staging.example.com/qa-login")
widgets = driver.find_elements(By.CSS_SELECTOR, ".cf-turnstile")
for w in widgets:
sitekey = w.get_attribute("data-sitekey")
action = w.get_attribute("data-action")
print(f"Sitekey: {sitekey}, Action: {action}")
Yöntem 2: JavaScript oluşturma çağrısı
Bazı siteler Turnstileyi programlı olarak işliyor:
turnstile.render('#captcha-container', {
sitekey: '0x4AAAAAAAB...',
callback: function(token) {
document.getElementById('cf-token').value = token;
},
});
Sayfa kaynağından alıntı:
# Find turnstile.render calls
render_match = re.search(
r'turnstile\.render\s*\([^,]*,\s*\{([^}]+)\}',
html
)
if render_match:
config = render_match.group(1)
sk = re.search(r'sitekey\s*:\s*["\']([^"\']+)', config)
if sk:
print(f"Sitekey from render: {sk.group(1)}")
Puppeteer müdahalesi
// Intercept turnstile.render before page loads
await page.evaluateOnNewDocument(() => {
window.__turnstileParams = [];
const origRender = window.turnstile?.render;
Object.defineProperty(window, 'turnstile', {
set(val) {
this._turnstile = val;
const orig = val.render;
val.render = function(container, params) {
window.__turnstileParams.push(params);
console.log('Turnstile render:', JSON.stringify(params));
return orig.apply(this, arguments);
};
},
get() { return this._turnstile; }
});
});
await page.goto('https://staging.example.com/qa-login', { waitUntil: 'networkidle2' });
const params = await page.evaluate(() => window.__turnstileParams);
console.log('Captured Turnstile params:', params);
Yöntem 3: Iframe src
Turnstile bir iframe oluşturur. Site anahtarı src'dedir:
document.querySelectorAll('iframe').forEach(iframe => {
if (iframe.src.includes('challenges.cloudflare.com')) {
console.log('Turnstile iframe:', iframe.src);
const match = iframe.src.match(/sitekey=([A-Za-z0-9_-]+)/);
if (match) console.log('Sitekey:', match[1]);
}
});
CaptchaAI ile Turnstileyi Çözmek
Python
import requests
import time
API_KEY = "YOUR_API_KEY"
SITEKEY = "0x4AAAAAAAB..."
PAGE_URL = "https://staging.example.com/qa-login"
# Submit
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": SITEKEY,
"pageurl": PAGE_URL,
"json": "1",
}).json()
if resp["status"] != 1:
raise Exception(f"Submit error: {resp['request']}")
task_id = resp["request"]
# Poll
for _ in range(24):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": "1"
}).json()
if result["status"] == 1:
token = result["request"]
print(f"Turnstile token: {token[:50]}...")
break
if result["request"] != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result['request']}")
JavaScript
const axios = require('axios');
const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: {
key: 'YOUR_API_KEY',
method: 'turnstile',
sitekey: '0x4AAAAAAAB...',
pageurl: 'https://staging.example.com/qa-login',
json: 1,
}
});
const taskId = submit.data.request;
// Poll for result
let token = null;
for (let i = 0; i < 24; i++) {
await new Promise(r => setTimeout(r, 5000));
const poll = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
});
if (poll.data.status === 1) {
token = poll.data.request;
break;
}
}
console.log(`Token: ${token.substring(0, 50)}...`);
Jeton enjeksiyonu
Turnstile, jetonunu cf-turnstile-response adlı gizli bir girişte saklar:
# Selenium
driver.execute_script("""
const input = document.querySelector('input[name="cf-turnstile-response"]');
if (input) input.value = arguments[0];
// Also set in the Turnstile widget's callback
const widget = document.querySelector('.cf-turnstile');
const callbackName = widget?.getAttribute('data-callback');
if (callbackName && typeof window[callbackName] === 'function') {
window[callbackName](arguments[0]);
}
""", token)
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
.cf-turnstile öğesi bulunamadı |
Dinamik olarak oluşturuldu | Sayfanın yüklenmesini bekleyin veya MutationObserver'ı kullanın |
| Site anahtarı boş | JavaScript API aracılığıyla ayarlayın | Komut dosyalarında turnstile.render'yi arayın |
| Jeton reddedildi | Yanlış site anahtarı veya sayfa URL'si | Her iki değerin de hedef siteyle eşleştiğini tekrar kontrol edin |
method parametresi yanlış |
Turnstile için userrecaptcha Kullanımı |
method=turnstile'yi kullanın |
SSS
Turnstileyi çözmek reCAPTCHA'yı çözmekten daha mı zor?
Hayır. CaptchaAI her ikisini de yönetir. Turnstile genellikle reCAPTCHA v2 ile karşılaştırılabilecek şekilde 10-25 saniyede çözülür.
Turnstilenin görünmez modu var mı?
Turnstile, görünür bir widget göstermeyen "yönetilen" ve "etkileşimsiz" modlara sahiptir. Site anahtarı çıkarma yöntemleri aynı şekilde çalışır.
Cloudflare Turnstile CAPTCHA'larını CaptchaAI ile çözün
API anahtarınızı şu adresten alın:captchaai.com.