Mọi giải pháp reCAPTCHA thông qua CaptchaAI đều yêu cầu URL trang và khóa trang chính xác. Một số loại CAPTCHA cũng cần các tham số bổ sung - hành động (v3), dữ liệu (trang web của Google) hoặc cờ doanh nghiệp. Hướng dẫn này đề cập đến mọi phương pháp trích xuất.
Thông số theo phiên bản reCAPTCHA
| tham số | v2 Tiêu chuẩn | v2 Vô hình | v3 | Doanh nghiệp |
|---|---|---|---|---|
googlekey (khóa trang web) |
Bắt buộc | Bắt buộc | Bắt buộc | Bắt buộc |
pageurl |
Bắt buộc | Bắt buộc | Bắt buộc | Bắt buộc |
invisible |
— | 1 |
— | — |
action |
— | — | Bắt buộc | Đôi khi |
data-s |
Đôi khi | Đôi khi | — | — |
enterprise |
— | — | — | 1 |
Cách 1: Trích xuất thuộc tính HTML
Từ thuộc tính data-sitekey
import re
import requests
url = "https://staging.example.com/qa-login"
html = requests.get(url).text
# Find data-sitekey
match = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)["\']', html)
if match:
sitekey = match.group(1)
print(f"Sitekey: {sitekey}")
# Check if invisible
invisible_match = re.search(r'data-size=["\']invisible["\']', html)
is_invisible = bool(invisible_match)
print(f"Invisible: {is_invisible}")
# Find callback
callback_match = re.search(r'data-callback=["\'](\w+)["\']', html)
callback = callback_match.group(1) if callback_match else None
print(f"Callback: {callback}")
# Check for data-s (Google-owned sites)
data_s_match = re.search(r'data-s=["\']([^"\']+)["\']', html)
data_s = data_s_match.group(1) if data_s_match else None
print(f"data-s: {data_s}")
JavaScript (Puppeteer)
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://staging.example.com/qa-login', { waitUntil: 'networkidle2' });
const params = await page.evaluate(() => {
const widget = document.querySelector('.g-recaptcha');
if (!widget) return null;
return {
sitekey: widget.getAttribute('data-sitekey'),
size: widget.getAttribute('data-size'),
callback: widget.getAttribute('data-callback'),
dataS: widget.getAttribute('data-s'),
invisible: widget.getAttribute('data-size') === 'invisible',
};
});
console.log(params);
Cách 2: Trích xuất thẻ script
Khóa trang web reCAPTCHA v3 và Enterprise
khóa trang web v3 được nhúng trong URL tập lệnh:
# Find sitekey from script src
v3_match = re.search(
r'recaptcha/(?:api|enterprise)\.js\?.*?render=([A-Za-z0-9_-]+)',
html
)
if v3_match:
sitekey = v3_match.group(1)
print(f"v3 Sitekey: {sitekey}")
# Check enterprise
is_enterprise = 'enterprise.js' in html
print(f"Enterprise: {is_enterprise}")
Tìm tham số hành động
Hành động được truyền bằng mã JavaScript, không phải bằng thuộc tính HTML:
# Search for grecaptcha.execute calls
action_match = re.search(
r'grecaptcha\.execute\s*\([^,]+,\s*\{[^}]*action\s*:\s*["\']([^"\']+)',
html
)
if action_match:
action = action_match.group(1)
print(f"Action: {action}")
Cách 3: Trích xuất iframe src
Khi reCAPTCHA được hiển thị bên trong iframe:
# Find reCAPTCHA iframe
iframe_match = re.search(
r'<iframe[^>]+src=["\']([^"\']*recaptcha/api2/anchor[^"\']*)["\']',
html
)
if iframe_match:
iframe_src = iframe_match.group(1)
sitekey_match = re.search(r'k=([A-Za-z0-9_-]+)', iframe_src)
if sitekey_match:
sitekey = sitekey_match.group(1)
print(f"Iframe sitekey: {sitekey}")
Phương pháp 4: Trích xuất kết xuất JavaScript
Đối với các trang hiển thị reCAPTCHA động bằng grecaptcha.render():
# Find grecaptcha.render calls
render_match = re.search(
r'grecaptcha\.render\s*\([^,]*,\s*\{([^}]+)\}',
html
)
if render_match:
config = render_match.group(1)
sk = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', config)
cb = re.search(r'callback\s*:\s*["\']?(\w+)', config)
sz = re.search(r'size\s*:\s*["\'](\w+)', config)
print(f"Sitekey: {sk.group(1) if sk else 'not found'}")
print(f"Callback: {cb.group(1) if cb else 'not found'}")
print(f"Size: {sz.group(1) if sz else 'not found'}")
Chức năng trích xuất hoàn chỉnh
import re
import requests
def extract_recaptcha_params(url):
html = requests.get(url, timeout=15).text
params = {"pageurl": url}
# Sitekey from data-sitekey
sk = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)', html)
if sk:
params["sitekey"] = sk.group(1)
# Sitekey from script render parameter (v3)
if "sitekey" not in params:
v3 = re.search(r'render=([A-Za-z0-9_-]{20,})', html)
if v3:
params["sitekey"] = v3.group(1)
# Sitekey from iframe
if "sitekey" not in params:
iframe = re.search(r'recaptcha.*?k=([A-Za-z0-9_-]+)', html)
if iframe:
params["sitekey"] = iframe.group(1)
# Sitekey from grecaptcha.render
if "sitekey" not in params:
render = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', html)
if render:
params["sitekey"] = render.group(1)
# Version detection
if re.search(r'data-size=["\']invisible', html):
params["invisible"] = True
if 'enterprise.js' in html:
params["enterprise"] = True
# Action (v3)
action = re.search(
r'action\s*:\s*["\']([^"\']+)',
html[html.find('grecaptcha.execute'):] if 'grecaptcha.execute' in html else ''
)
if action:
params["action"] = action.group(1)
# data-s
ds = re.search(r'data-s=["\']([^"\']+)', html)
if ds:
params["data_s"] = ds.group(1)
# Callback
cb = re.search(r'data-callback=["\'](\w+)', html)
if cb:
params["callback"] = cb.group(1)
return params
# Usage
params = extract_recaptcha_params("https://staging.example.com/qa-login")
for k, v in params.items():
print(f" {k}: {v}")
Sản lượng dự kiến:
pageurl: https://staging.example.com/qa-login
sitekey: 6Le-SITEKEY-abc123
invisible: True
callback: onCaptchaComplete
Gửi các tham số đã trích xuất tới CaptchaAI
data = {
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": params["sitekey"],
"pageurl": params["pageurl"],
"json": "1",
}
if params.get("invisible"):
data["invisible"] = "1"
if params.get("enterprise"):
data["enterprise"] = "1"
if params.get("action"):
data["action"] = params["action"]
if params.get("data_s"):
data["data-s"] = params["data_s"]
resp = requests.post("https://ocr.captchaai.com/in.php", data=data).json()
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Không tìm thấy khóa trang web | Trang sử dụng kết xuất động | Sử dụng Puppeteer/Selenium thay vì HTML tĩnh |
| Khóa trang web sai | Nhiều phiên bản reCAPTCHA | Kiểm tra xem tiện ích nào ánh xạ tới biểu mẫu bạn đang gửi |
| Không tìm thấy hành động | Được xác định trong tệp JS bên ngoài | Tìm nạp và tìm kiếm các tệp JavaScript được liên kết |
data-s thay đổi theo yêu cầu |
Google tái tạo nó | Trích xuất data-s mới cho mỗi lần giải |
Câu hỏi thường gặp
Tôi có thể trích xuất các tham số mà không cần tải trang trong trình duyệt không?
Có, đối với hầu hết các trang web — mã khóa trang web nằm trong nguồn HTML. Tuy nhiên, CAPTCHA được hiển thị bằng JavaScript yêu cầu trình duyệt hoặc trình duyệt không có giao diện người dùng.
Khóa trang web có giống với khóa API không?
Không. Sitekey là khóa công khai được gán cho trang web. Việc chia sẻ là an toàn và hiển thị trong nguồn trang.
Sử dụng các tham số được trích xuất bằng CaptchaAI để giải quyết một cách đáng tin cậy
Nhận khóa API của bạn tạicaptchaai.com.
Hướng dẫn liên quan
- Bảng điều khiển trình duyệt Phát hiện CAPTCHA
- Cơ chế gọi lại reCAPTCHA v2
- reCAPTCHA v2 Vô hình: Phát hiện kích hoạt