Các trang web Trung Quốc sử dụng các loại CAPTCHA hiếm thấy ở các thị trường phương Tây — CAPTCHA hình ảnh ký tự Trung Quốc, câu đố số học bằng tiếng Quan Thoại, xác minh trang trình bày GeeTest và các nhà cung cấp độc quyền như Tencent CAPTCHA. Nếu bạn đang thu thập dữ liệu từ Baidu, Taobao, cổng thông tin chính phủ hoặc cơ sở dữ liệu học thuật, bạn cần phải giải quyết những thách thức theo khu vực cụ thể này.
Các loại CAPTCHA phổ biến trên các trang web Trung Quốc
| loại CAPTCHA | Nơi sử dụng | Bộ giải CaptchaAI |
|---|---|---|
| Hình ảnh chữ Hán | Cổng thông tin chính phủ, cơ sở dữ liệu học thuật | Image/OCR với language=chi_sim |
| Số học trong tiếng Trung | Mẫu đăng ký | Hình ảnh/OCR |
| Câu đố trượt GeeTest v3 | Baidu, Bilibili, nhiều nền tảng chính | GeeTest v3 |
| Bấm vào ký tự | "Bấm vào ký tự Trung Quốc theo thứ tự" | Image/OCR (chế độ tọa độ) |
| reCAPTCHA v2 | Các trang web quốc tế của Trung Quốc | reCAPTCHA v2 |
Python: Hình ảnh ký tự tiếng Trung CAPTCHA
CAPTCHA hình ảnh tiếng Trung hiển thị các ký tự như 请输入验è¯ç (vui lòng nhập mã xác minh) và yêu cầu OCR văn bản tiếng Trung.
import requests
import base64
import time
API_KEY = "YOUR_API_KEY"
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def solve_chinese_image_captcha(image_path: str) -> str:
"""Solve a Chinese character image CAPTCHA."""
with open(image_path, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
resp = requests.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "base64",
"body": image_b64,
"language": 2, # 2 = Chinese characters supported
"json": 1,
}, timeout=30).json()
if resp.get("status") != 1:
raise RuntimeError(f"Submit failed: {resp.get('request')}")
task_id = resp["request"]
start = time.monotonic()
while time.monotonic() - start < 120:
time.sleep(5)
poll = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get",
"id": task_id, "json": 1,
}, timeout=15).json()
if poll.get("request") == "CAPCHA_NOT_READY":
continue
if poll.get("status") == 1:
return poll["request"]
raise RuntimeError(f"Solve failed: {poll.get('request')}")
raise RuntimeError("Timeout")
def solve_chinese_captcha_from_url(captcha_url: str, cookies: dict = None) -> str:
"""Download and solve a Chinese CAPTCHA from a URL."""
session = requests.Session()
if cookies:
session.cookies.update(cookies)
resp = session.get(captcha_url, timeout=15)
image_b64 = base64.b64encode(resp.content).decode()
submit = requests.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "base64",
"body": image_b64,
"language": 2,
"json": 1,
}, timeout=30).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit: {submit.get('request')}")
task_id = submit["request"]
for _ in range(24):
time.sleep(5)
poll = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1,
}, timeout=15).json()
if poll.get("request") == "CAPCHA_NOT_READY":
continue
if poll.get("status") == 1:
return poll["request"]
raise RuntimeError(f"Solve: {poll.get('request')}")
raise RuntimeError("Timeout")
# --- GeeTest on Chinese platforms ---
def solve_geetest_chinese(gt: str, challenge: str, pageurl: str) -> dict:
"""Solve GeeTest v3 commonly found on Baidu, Bilibili, etc."""
resp = requests.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "geetest",
"gt": gt,
"challenge": challenge,
"pageurl": pageurl,
"json": 1,
}, timeout=30).json()
if resp.get("status") != 1:
raise RuntimeError(f"Submit: {resp.get('request')}")
task_id = resp["request"]
for _ in range(36):
time.sleep(5)
poll = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1,
}, timeout=15).json()
if poll.get("request") == "CAPCHA_NOT_READY":
continue
if poll.get("status") == 1:
# GeeTest returns challenge, validate, seccode
return poll["request"]
raise RuntimeError(f"Solve: {poll.get('request')}")
raise RuntimeError("Timeout")
# Usage — Chinese government portal
text = solve_chinese_image_captcha("chinese_captcha.png")
print(f"Chinese CAPTCHA text: {text}")
# GeeTest on a Chinese platform
geetest_result = solve_geetest_chinese(
gt="b46d1900d0a894591f1561f8c35670a7",
challenge="dynamic_challenge_string",
pageurl="https://www.example.cn/login",
)
JavaScript: Luồng CAPTCHA của trang web Trung Quốc
const API_KEY = "YOUR_API_KEY";
const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";
const fs = require("fs");
async function solveChineseImageCaptcha(imagePath) {
const imageB64 = fs.readFileSync(imagePath, "base64");
const body = new URLSearchParams({
key: API_KEY,
method: "base64",
body: imageB64,
language: "2",
json: "1",
});
const resp = await (await fetch(SUBMIT_URL, { method: "POST", body })).json();
if (resp.status !== 1) throw new Error(`Submit: ${resp.request}`);
const taskId = resp.request;
for (let i = 0; i < 24; i++) {
await new Promise((r) => setTimeout(r, 5000));
const url = `${RESULT_URL}?key=${API_KEY}&action=get&id=${taskId}&json=1`;
const poll = await (await fetch(url)).json();
if (poll.request === "CAPCHA_NOT_READY") continue;
if (poll.status === 1) return poll.request;
throw new Error(`Solve: ${poll.request}`);
}
throw new Error("Timeout");
}
async function solveGeeTest(gt, challenge, pageurl) {
const body = new URLSearchParams({
key: API_KEY,
method: "geetest",
gt,
challenge,
pageurl,
json: "1",
});
const resp = await (await fetch(SUBMIT_URL, { method: "POST", body })).json();
if (resp.status !== 1) throw new Error(`Submit: ${resp.request}`);
const taskId = resp.request;
for (let i = 0; i < 36; i++) {
await new Promise((r) => setTimeout(r, 5000));
const url = `${RESULT_URL}?key=${API_KEY}&action=get&id=${taskId}&json=1`;
const poll = await (await fetch(url)).json();
if (poll.request === "CAPCHA_NOT_READY") continue;
if (poll.status === 1) return poll.request;
throw new Error(`Solve: ${poll.request}`);
}
throw new Error("Timeout");
}
// Usage
const text = await solveChineseImageCaptcha("chinese_captcha.png");
console.log(`Chinese text: ${text}`);
Mẹo để quét trang web Trung Quốc
| Thử thách | Giải pháp |
|---|---|
| Ký tự hiển thị không chính xác | Đảm bảo mã hóa UTF-8 trong các yêu cầu và phản hồi |
| Yêu cầu cookie phiên | Tìm nạp hình ảnh CAPTCHA trong cùng một phiên |
| Tham số GeeTest trong JavaScript | Trích xuất gt và challenge từ tập lệnh trang hoặc lệnh gọi API |
| Giới hạn tỷ lệ bởi CDN Trung Quốc | Sử dụng proxy có địa chỉ IP Trung Quốc để có độ tin cậy cao hơn |
| CAPTCHA làm mới mỗi lần tải | Tải xuống hình ảnh một lần, giải quyết, sau đó gửi - không tải lại |
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Kết quả là ký tự Trung Quốc bị cắt xén | Mã hóa không khớp | Đảm bảo phản hồi được giải mã dưới dạng UTF-8 |
GeeTest challenge đã hết hạn |
Thử thách có TTL ngắn | Trích xuất và gửi trong vòng vài giây sau khi tải |
| Hình ảnh CAPTCHA trả về văn bản sai | Kết hợp các ký tự Trung Quốc và Latin | Đặt language=2 để nhận dạng ký tự tiếng Trung |
| Phiên bị từ chối sau khi giải quyết | Cookie không được duy trì | Sử dụng cùng một phiên để tìm nạp CAPTCHA và gửi biểu mẫu |
| Giải quyết tỷ lệ thấp trên các trang web của chính phủ | Kết xuất ký tự phức tạp | Hình ảnh CAPTCHA có độ phân giải cao hơn cải thiện độ chính xác |
Câu hỏi thường gặp
CaptchaAI có hỗ trợ tiếng Trung giản thể và phồn thể không?
Vâng. Bộ giải Image/OCR xử lý cả ký tự tiếng Trung giản thể (简体) và truyền thống (ç¹é“”). Đặt language=2 để bật nhận dạng ký tự tiếng Trung. CaptchaAI nhận dạng hơn 27.500 loại CAPTCHA hình ảnh trên tất cả các ngôn ngữ.
Làm cách nào để xử lý GeeTest trên nền tảng Trung Quốc như Bilibili?
Trích xuất tham số gt (tĩnh trên mỗi trang) và tham số challenge (động mỗi phiên) từ nguồn trang hoặc điểm cuối API. Gửi cả hai tới bộ giải GeeTest của CaptchaAI. Phản hồi bao gồm các giá trị challenge, validate và seccode để gửi cùng với yêu cầu của bạn.
Các trang web Trung Quốc có cần proxy không?
Nhiều trang web Trung Quốc thực hiện kiểm tra địa lý dựa trên IP. Sử dụng proxy có địa chỉ IP Trung Quốc sẽ cải thiện tỷ lệ thành công. Khi chuyển proxy tới CaptchaAI, hãy sử dụng đa dạng nguồn yêu cầu Trung Quốc để có kết quả tốt nhất.
bài viết liên quan
- Cách giải quyết cuộc gọi lại Recaptcha V2 bằng Api
- Giải mã Captcha Ruby Captchaai Api
- Giải mã Captcha Scala Captchaai Api
Các bước tiếp theo
Bắt đầu giải CAPTCHA trên các trang web Trung Quốc –lấy khóa API CaptchaAI của bạnvà xử lý mọi loại CAPTCHA của Trung Quốc.
Hướng dẫn liên quan: