Teknik Açıklamalar

Cloudflare Turnstile Widget Modları: Yönetilen, Etkileşimsiz, Görünmez

Cloudflare Turnstile, zorlukların nasıl sunulacağını kontrol eden üç widget moduyla birlikte gelir: yönetilen (Cloudflare karar verir), etkileşimli olmayan (yalnızca iş kanıtı, hiçbir zaman kullanıcı arayüzünü göstermez) ve görünmez (widget kapsayıcısı yoktur, sessizce çalışır). Mod, kullanıcının ne göreceğini, mücadelenin ne kadar süreceğini ve widget'in görünür olup olmayacağını belirler. Otomasyon için, üç modun tümü aynı çıktıyı (bir cf-turnstile-response belirteci) üretir, ancak bunları tespit etmek ve çözmek, farklılıkların anlaşılmasını gerektirir.


Mod karşılaştırması

Özellik Yönetilen Etkileşimli değil Görünmez
Widget görünüyor mu? Bazen Asla (yalnızca döndürücü) Asla
Kapsayıcı öğesi gerekli mi? Evet Evet Evet (gizli)
Kullanıcı etkileşimi gerekli mi? Bazen (onay kutusu) Hayır Hayır
İş kanıtı mücadelesi mi? Evet (yükselebilir) Evet (her zaman) Evet (her zaman)
Etkileşimli onay kutusu geri dönüşü? Evet Hayır (bunun yerine başarısız olur) Hayır (bunun yerine başarısız olur)
Jeton çıkışı cf-turnstile-response cf-turnstile-response cf-turnstile-response
CaptchaAI yöntemi turnstile turnstile turnstile
Şunlar için önerilir Giriş yap, kayıt ol Düşük sürtünmeli formlar Arka planda doğrulama

Yönetilen mod (varsayılan)

Yönetilen mod, Cloudflare'in ziyaretçi başına zorluk seviyesine karar vermesine olanak tanır. Çoğu kullanıcı görünmez bir şekilde geçer. Şüpheli trafik bir onay kutusu görür. Son derece şüpheli trafik daha karmaşık bir sorunla karşılaşabilir.

Uygulama

<!-- Managed mode (default) -->
<div class="cf-turnstile"
     data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"
     data-theme="light">
</div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Otomasyonun gördüğü şey

Yönetilen mod, istekte bulunanın sinyallerine göre uyarlanır:

İtibar Widget şu şekilde oluşturulur:
Yüksek güven Görünmez geçiş (görünür kullanıcı arayüzü yok)
Orta güven Onay kutusu widget'ı (doğrulamak için tıklayın)
Düşük güven İnteraktif meydan okuma veya blok

Otomasyon için yönetilen mod en yaygın ve en değişken olanıdır. Widget, tarayıcı sinyallerine bağlı olarak görünür olabilir veya olmayabilir.

HTML'de algılama

def is_managed_mode(html):
    """Check if Turnstile is using managed mode (default)."""
    # Managed mode is the default — no explicit mode attribute
    has_turnstile = "cf-turnstile" in html
    has_explicit_mode = 'data-appearance="interaction-only"' in html or \
                        'data-appearance="always"' in html or \
                        'appearance: "interaction-only"' in html
    return has_turnstile and not has_explicit_mode

Etkileşimsiz mod

Etkileşimli olmayan mod hiçbir zaman bir onay kutusu veya etkileşimli öğe göstermez. Arka planda bir iş kanıtı sorgulaması çalıştırır ve yalnızca yüklenen bir döndürücüyü gösterir. Eğer meydan okuma etkileşimli olmayan bir şekilde tamamlanamazsa, tırmanmak yerine başarısız olur.

Uygulama

<!-- Non-interactive mode -->
<div class="cf-turnstile"
     data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"
     data-appearance="interaction-only">
</div>

Veya JavaScript API'si aracılığıyla:

turnstile.render('#turnstile-container', {
    sitekey: '0x4AAAAAAAC3DHQhMMQ_Rxrg',
    appearance: 'interaction-only',
    callback: function(token) {
        document.getElementById('cf-turnstile-response').value = token;
    },
});

Davranış

Page loads → Widget initializes
    ↓
Background proof-of-work runs
    ↓
Success → Token generated (no visible UI)
    OR
Failure → Widget reports error (no fallback to checkbox)

Siteler etkileşimli olmayan kullandığında

  • Yorum formları ve geri bildirim widget'ları
  • Bülten kayıtları
  • Sürtünmenin minimum düzeyde olması gereken düşük değerli eylemler
  • Tarayıcı tarafı korumalı API uç noktaları

Görünmez mod

Görünmez mod gerçekten görünmezdir; görünüm alanında hiçbir kapsayıcı öğe görünmez. Widget, sayfa yüklendiğinde (veya programatik tetikleyicide) çalışır ve herhangi bir görsel gösterge olmaksızın bir belirteç üretir.

Uygulama

<!-- Invisible mode — container is hidden -->
<div id="turnstile-invisible"
     class="cf-turnstile"
     data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"
     data-size="invisible">
</div>

Veya tamamen JavaScript aracılığıyla:

// Programmatic invisible Turnstile
turnstile.render('#hidden-container', {
    sitekey: '0x4AAAAAAAC3DHQhMMQ_Rxrg',
    size: 'invisible',
    callback: function(token) {
        // Token ready — submit form automatically
        submitForm(token);
    },
    'error-callback': function() {
        // Challenge failed
        console.error('Invisible Turnstile failed');
    },
});

Tespit zorluğu

Görünmez Turnstilenin algılanması zordur çünkü konteynerin görünür boyutları yoktur:

import re

def detect_invisible_turnstile(html):
    """Detect invisible Turnstile on a page."""
    indicators = {
        "script_loaded": "challenges.cloudflare.com/turnstile" in html,
        "size_invisible": 'data-size="invisible"' in html or
                          "size: 'invisible'" in html or
                          'size: "invisible"' in html,
        "api_render_call": "turnstile.render" in html,
        "response_field": "cf-turnstile-response" in html,
    }

    if indicators["script_loaded"] and indicators["size_invisible"]:
        return {"mode": "invisible", "confidence": "high"}
    elif indicators["script_loaded"] and indicators["api_render_call"]:
        return {"mode": "invisible_or_programmatic", "confidence": "medium"}
    elif indicators["response_field"]:
        return {"mode": "turnstile_present", "confidence": "low"}

    return {"mode": "none", "confidence": "high"}

Tüm modlarda site anahtarını çıkarma

Moddan bağımsız olarak, çözüm için site anahtarı gereklidir. Herhangi bir moddan çıkarın:

import re

def extract_turnstile_sitekey(html):
    """Extract Turnstile sitekey from page HTML (works for all modes)."""

    # Pattern 1: data-sitekey attribute in HTML
    match = re.search(r'data-sitekey=["\']([0-9x][A-Za-z0-9_-]+)["\']', html)
    if match:
        return match.group(1)

    # Pattern 2: JavaScript render call
    match = re.search(r"sitekey:\s*['\"]([0-9x][A-Za-z0-9_-]+)['\"]", html)
    if match:
        return match.group(1)

    # Pattern 3: Turnstile config object
    match = re.search(r"siteKey['\"]?\s*[:=]\s*['\"]([0-9x][A-Za-z0-9_-]+)['\"]", html)
    if match:
        return match.group(1)

    return None

CaptchaAI ile üç modun tamamını çözme

Her üç Turnstile modu da CaptchaAI ile aynı şekilde çözülür. Mod, API çağrısını etkilemez:

Python

import requests
import time

API_KEY = "YOUR_API_KEY"

def solve_turnstile(sitekey, page_url):
    """Solve any Turnstile mode — managed, non-interactive, or invisible."""
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "turnstile",
        "sitekey": sitekey,
        "pageurl": page_url,
        "json": 1,
    })

    task_id = submit.json()["request"]

    for _ in range(60):
        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.get("status") == 1:
            return result["request"]

    raise TimeoutError("Turnstile solve timed out")


# Use with any mode
token = solve_turnstile("0x4AAAAAAAC3DHQhMMQ_Rxrg", "https://staging.example.com/qa-login")
print(f"Token: {token[:50]}...")

Node.js

const axios = require("axios");

const API_KEY = "YOUR_API_KEY";

async function solveTurnstile(sitekey, pageUrl) {
  const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
    params: {
      key: API_KEY,
      method: "turnstile",
      sitekey,
      pageurl: pageUrl,
      json: 1,
    },
  });

  const taskId = submit.data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));

    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: taskId, json: 1 },
    });

    if (result.data.status === 1) {
      return result.data.request;
    }
  }

  throw new Error("Turnstile solve timed out");
}

// Same function works for all Turnstile modes
solveTurnstile("0x4AAAAAAAC3DHQhMMQ_Rxrg", "https://staging.example.com/qa-login")
  .then((token) => console.log("Token:", token.substring(0, 50)));

Sorun giderme

Belirti Sebep Düzeltme
Belirteç geçerli ancak form bunu reddediyor Yanlış site anahtarı (görünür widget'tan farklı) JavaScript ile oluşturulan site anahtarını kontrol edin
Widget HTML'de bulunamadı İlk oluşturma işleminden sonra görünmez mod yüklendi Tam sayfanın yüklenmesini bekleyin, XHR yanıtlarını kontrol edin
Sayfada birden fazla Turnstile widget'ı Farklı formlar için farklı site anahtarları Site anahtarını belirli bir formla eşleştirin
data-size="compact" algılamayı karıştırıyor Kompakt bir mod değil, bir boyut çeşididir Kompakt, varsayılan olarak yönetilen modu kullanır
data-action özelliği mevcut Bir mod değil, analitik için eylem etiketi Doğrulama için gerekiyorsa çözüme eylemi dahil edin
Token'ın süresi gönderilmeden önce dolar Turnstile jetonlarının geçerliliği 300 saniye içinde sona erer Göndermeden hemen önce çözün

Sık sorulan sorular

Turnstile modu CaptchaAI'nin çözümünü etkiler mi?

Hayır. CaptchaAI, üç modun tümü için aynı turnstile yöntemini kullanır. Gerekli parametreler yalnızca site anahtarı ve sayfa URL'sidir. Mod, belirteç biçimini veya doğrulama akışını değiştirmez.

Bir sitenin hangi modu kullandığını nasıl bilebilirim?

data-appearance veya data-size nitelikleri için HTML'yi kontrol edin. data-size="invisible" mevcutsa görünmez moddur. data-appearance="interaction-only" mevcutsa etkileşimli değildir. İkisi de ayarlanmamışsa, yönetilen moddur (varsayılan).

Bir site modları dinamik olarak değiştirebilir mi?

Evet. Bazı siteler varsayılan olarak yönetilen modu kullanır ve belirli sayfalar veya kullanıcı segmentleri için etkileşimli olmayan moda geçer. Site anahtarı genellikle aynı kalır. Navigasyonda modu her zaman yeniden tespit edin.

Modlar arasındaki başarı oranı farkı nedir?

CaptchaAI tüm Turnstile modlarında %100 başarı oranına ulaşır. Mod yalnızca kullanıcıya yönelik davranışı etkiler; API düzeyindeki zorluk aynıdır.


Özet

Cloudflare Turnstile'nin üç widget modu (yönetilen, etkileşimli olmayan ve görünmez) kullanıcı deneyimini kontrol eder ancak aynı cf-turnstile-response jetonunu üretir. Otomasyon için tüm modlar aynı şekilde çözülür.CaptchaAI'nin Turnstile çözücüsü%100 başarı oranıyla. Geliştiriciler için temel fark algılamadır: Yönetilen mod görünür HTML'yi gösterirken görünmez mod, site anahtarını bulmak için daha derin sayfa analizi gerektirir.

İlgili Makaleler

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