中国网站使用西方市场中很少见的验证码类型——汉字图像验证码、普通话算术谜题、GeeTest幻灯片验证以及腾讯验证码等专有提供商。如果您从百度、淘宝、政府门户网站或学术数据库收集数据,则需要应对这些特定于地区的挑战。
中文网站常见的验证码类型
| 验证码类型 | 使用地点 | CaptchaAI 求解器 |
|---|---|---|
| 汉字形象 | 政府门户网站、学术数据库 | 图片/OCR 与 language=chi_sim |
| 算术 中文 | 登记表 | 图片/OCR |
| GeeTest v3 幻灯片拼图 | 百度、B站、各大平台 | GeeTest v3 |
| 点击角色 | “按顺序点击汉字” | Image/OCR(坐标模式) |
| reCAPTCHA v2 | 国际中文网站 | reCAPTCHA v2 |
Python:汉字图像验证码
中文图像验证码显示“入验è́ç ”等字符(请输入验证码),并要求对中文文本进行 OCR。
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:中文网站验证码流程
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}`);
中文网站抓取技巧
| 挑战 | 解决方案 |
|---|---|
| 字符渲染不正确 | 确保请求和响应中的 UTF-8 编码 |
| 需要会话cookie | 在同一会话中获取验证码图像 |
| JavaScript 中的 GeeTest 参数 | 从页面脚本或 API 调用中提取 gt 和 challenge |
| 中国 CDN 的速率限制 | 使用具有中国 IP 地址的代理以获得更好的可靠性 |
| 每次加载时都会刷新验证码 | 下载图像一次,解决,然后提交 - 不要重新加载 |
故障排除
| 问题 | 原因 | 处理方式 |
|---|---|---|
| 结果出现中文乱码 | 编码不匹配 | 确保响应被解码为 UTF-8 |
极测 challenge 已过期 |
挑战的 TTL 较短 | 加载后几秒内提取并提交 |
| 图像验证码返回错误文本 | 中文和拉丁字符混合 | 设置language=2进行汉字识别 |
| 解决后会话被拒绝 | 未维护 Cookie | 使用同一会话进行验证码获取和表单提交 |
| 政府网站解决率低 | 复杂的角色渲染 | 更高分辨率的验证码图像可提高准确性 |
常问问题
CaptchaAI支持简体中文和繁体中文吗?
是的。 Image/OCR 求解器可处理简体 (简体) 和繁体 (ç¤é«”) 汉字。设置language=2以启用汉字识别。 CaptchaAI 可识别所有语言的 27,500 多种图像验证码类型。
如何在Bilibili等中国平台上处理GeeTest?
从页面源或 API 端点提取 gt 参数(每个站点静态)和 challenge 参数(每个会话动态)。将两者提交给 CaptchaAI 的 GeeTest 求解器。响应包括与您的请求一起提交的 challenge、validate 和 seccode 值。
中国网站需要代理吗?
许多中国网站执行基于 IP 的地理检查。使用具有中国 IP 地址的代理可以提高成功率。将代理传递给 CaptchaAI 时,请使用中国自有服务器基础设施以获得最佳结果。
相关文章
下一步
开始解决中文网站上的验证码 -”获取您的 CaptchaAI API 密钥并处理任何中文验证码类型。
相关指南: