الدروس التطبيقية

Cloudflare Turnstile استخراج مفتاح الموقع وحله

Cloudflare Turnstile هو بديل CAPTCHA الأسرع نموًا. لحلها باستخدام CaptchaAI، تحتاج إلى مفتاح الموقع وعنوان URL للصفحة. يغطي هذا الدليل كل الطرق للعثور على مفتاح الموقع - بدءًا من استعلامات DOM البسيطة وحتى اعتراض استدعاءات عرض JavaScript.


حيث تعيش مفاتيح الموقع Turnstile

تظهر مفاتيح موقع Turnstile في ثلاثة أماكن:

  1. سمة data-sitekey على عناصر .cf-turnstile
  2. استدعاء turnstile.render() JavaScript
  3. عنوان URL الخاص بـ Turnstile iframe src

الطريقة الأولى: سمة DOM

// 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'),
  });
});

بايثون (HTML ثابت)

import re
import requests

html = requests.get("https://example.com/login").text

matches = re.findall(
    r'class=["\'][^"\']*cf-turnstile[^"\']*["\'][^>]*data-sitekey=["\']([^"\']+)',
    html
)
for sk in matches:
    print(f"Sitekey: {sk}")

بايثون (السيلينيوم)

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com/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}")

الطريقة الثانية: عرض استدعاء JavaScript

تعرض بعض المواقع Turnstile برمجيًا:

turnstile.render('#captcha-container', {
  sitekey: '0x4AAAAAAAB...',
  callback: function(token) {
    document.getElementById('cf-token').value = token;
  },
});

مقتطف من مصدر الصفحة:

# 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

// 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://example.com/login', { waitUntil: 'networkidle2' });

const params = await page.evaluate(() => window.__turnstileParams);
console.log('Captured Turnstile params:', params);

الطريقة الثالثة: Iframe src

يعرض Turnstile إطار iframe. مفتاح الموقع موجود في src:

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]);
  }
});

حل Turnstile مع CaptchaAI

بايثون

import requests
import time

API_KEY = "YOUR_API_KEY"
SITEKEY = "0x4AAAAAAAB..."
PAGE_URL = "https://example.com/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://example.com/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)}...`);

حقن الرمز

يقوم Turnstile بتخزين الرمز المميز الخاص به في إدخال مخفي يسمى cf-turnstile-response:

# 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)

استكشاف الأخطاء وإصلاحها

مشكلة السبب إصلاح
لم يتم العثور على عنصر .cf-turnstile يتم تقديمه ديناميكيًا انتظر تحميل الصفحة أو استخدم MutationObserver
مفتاح الموقع فارغ يتم التعيين عبر JavaScript API ابحث عن turnstile.render في البرامج النصية
تم رفض الرمز المميز مفتاح الموقع أو عنوان URL للصفحة غير صحيح تحقق مرة أخرى من تطابق القيمتين مع الموقع المستهدف
معلمة method خاطئة استخدام userrecaptcha للباب الدوار استخدم method=turnstile

الأسئلة الشائعة

هل حل Turnstile أصعب من حل reCAPTCHA؟

رقم CaptchaAI يتعامل مع كليهما. يتم حل Turnstile عادة خلال 10-25 ثانية، مقارنة بـ reCAPTCHA v2.

هل لدى Turnstile وضع غير مرئي؟

يحتوي Turnstile على أوضاع "مُدارة" و"غير تفاعلية" لا تعرض أداة مرئية. تعمل طرق استخراج مفتاح الموقع بنفس الطريقة.


حل اختبارات CAPTCHA Cloudflare Turnstile باستخدام CaptchaAI

احصل على مفتاح API الخاص بك علىcaptchaai.com.


أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.