Hướng Dẫn Thực Hành

Khai thác và giải quyết khóa trang web quay vòng của Cloudflare

Cloudflare Turnstile là giải pháp thay thế CAPTCHA phát triển nhanh nhất. Để giải quyết vấn đề này bằng CaptchaAI, bạn cần có khóa trang và URL trang. Hướng dẫn này trình bày mọi cách để tìm khóa trang web — từ truy vấn DOM đơn giản đến chặn lệnh gọi kết xuất JavaScript.


Vị trí của khóa trang web Turnstile tồn tại

Khóa trang web quay vòng xuất hiện ở ba vị trí:

  1. Thuộc tính data-sitekey trên phần tử .cf-turnstile
  2. Lệnh gọi JavaScript turnstile.render()
  3. URL iframe src của Turnstile

Cách 1: Thuộc tính 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'),
  });
});

Python (HTML tĩnh)

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 (Selen)

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}")

Phương pháp 2: Lệnh gọi kết xuất JavaScript

Một số trang web hiển thị Turnstile theo chương trình:

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

Trích xuất từ nguồn trang:

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

chặn rối

// 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);

Cách 3: Iframe src

Turnstile hiển thị iframe. Khóa trang web nằm trong 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]);
  }
});

Giải quyết cửa quay bằng CaptchaAI

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)}...`);

Tiêm mã thông báo

Turnstile lưu trữ mã thông báo của nó trong một đầu vào ẩn có tên 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)

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Không tìm thấy phần tử .cf-turnstile Hiển thị động Đợi tải trang hoặc sử dụng MutationObserver
Khóa trang web trống Đặt qua API JavaScript Tìm kiếm turnstile.render trong tập lệnh
Mã thông báo bị từ chối URL trang hoặc khóa trang web sai Kiểm tra kỹ cả hai giá trị khớp với trang đích
Tham số method sai Sử dụng userrecaptcha cho Cloudflare Turnstile Sử dụng method=turnstile

Câu hỏi thường gặp

Turnstile có khó giải quyết hơn reCAPTCHA không?

Không. CaptchaAI xử lý cả hai. Cloudflare Turnstile thường giải quyết trong 10-25 giây, có thể so sánh với reCAPTCHA v2.

Turnstile có chế độ vô hình không?

Turnstile có các chế độ "được quản lý" và "không tương tác" không hiển thị tiện ích hiển thị. Các phương pháp trích xuất sitekey hoạt động giống nhau.


Giải quyết CAPTCHA Cloudflare Turnstile bằng CaptchaAI

Nhận khóa API của bạn tạicaptchaai.com.


Hướng dẫn liên quan

Os comentários estão desativados para este artigo.