Eğitimler

Cloudflare Turnstile Site Anahtarı Çıkarma ve Çözme

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:

  1. .cf-turnstile öğelerindeki data-sitekey özelliği
  2. turnstile.render() JavaScript çağrısı
  3. Turnstile iframe src URL'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.


İlgili kılavuzlar

Bu makale için yorumlar devre dışı bırakılmıştır.