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í:
- Thuộc tính
data-sitekeytrên phần tử.cf-turnstile - Lệnh gọi JavaScript
turnstile.render() - URL iframe
srccủ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
- Trích xuất tham số reCAPTCHA từ nguồn trang
- Bảng điều khiển trình duyệt Phát hiện CAPTCHA
- Cloudflare Turnstile so với hCaptcha và reCAPTCHA