Os sites chineses usam tipos de CAPTCHA raramente vistos nos mercados ocidentais - CAPTCHAs de imagem de caracteres chineses, quebra-cabeças aritméticos em mandarim, verificações de slides GeeTest e fornecedores proprietários como Tencent CAPTCHA. Se você estiver coletando dados do Baidu, Taobao, portais governamentais ou bancos de dados acadêmicos, precisará lidar com esses desafios específicos da região.
Tipos comuns de CAPTCHA em sites chineses
| Tipo CAPTCHA | Onde usado | Solucionador CaptchaAI |
|---|---|---|
| Imagem de caracteres chineses | Portais governamentais, bancos de dados acadêmicos | Imagem/OCR com language=chi_sim |
| Aritmética em Chinês | Formulários de inscrição | Imagem/OCR |
| Quebra-cabeça deslizante GeeTest v3 | Baidu, Bilibili, muitas plataformas importantes | GeeTest v3 |
| Clique no personagem | "Clique no caractere chinês em ordem" | Image/OCR (modo de coordenadas) |
| reCAPTCHA v2 | Sites chineses internacionais | reCAPTCHA v2 |
Python: imagem de caracteres chineses CAPTCHA
CAPTCHAs de imagem em chinês exibem caracteres como 请输入验è¯ç (insira o código de verificação) e exigem OCR de texto em chinês.
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: Fluxo CAPTCHA do site chinês
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}`);
Dicas para raspagem de sites chineses
| Desafio | Solução |
|---|---|
| Caracteres renderizados incorretamente | Garanta a codificação UTF-8 em solicitações e respostas |
| Cookies de sessão necessários | Busque a imagem CAPTCHA na mesma sessão |
| Parâmetros GeeTest em JavaScript | Extraia gt e challenge de scripts de página ou chamadas de API |
| Limitação de taxa por CDNs chineses | Use proxies com endereços IP chineses para mais adequado confiabilidade |
| CAPTCHA é atualizado a cada carregamento | Baixe a imagem uma vez, resolva e envie – não recarregue |
Solução de problemas
| Problema | Causa | Correção |
|---|---|---|
| Caracteres chineses ilegíveis no resultado | Incompatibilidade de codificação | Certifique-se de que a resposta seja decodificada como UTF-8 |
GeeTest challenge expirou |
Desafio tem TTL curto | Extraia e envie segundos após o carregamento |
| Imagem CAPTCHA retorna texto errado | Mistura de caracteres chineses e latinos | Defina language=2 para reconhecimento de caracteres chineses |
| Sessão rejeitada após resolução | Cookies não mantidos | Use a mesma sessão para busca de CAPTCHA e envio de formulário |
| Resolver taxa baixa em sites governamentais | Renderização de caracteres complexos | Imagens CAPTCHA de alta resolução aprimoram a precisão |
Perguntas frequentes
O CaptchaAI suporta chinês simplificado e tradicional?
Sim. O solucionador Image/OCR lida com caracteres chineses simplificados (简体) e tradicionais (ç¹é«”). Defina language=2 para ativar o reconhecimento de caracteres chineses. CaptchaAI reconhece mais de 27.500 tipos de imagens CAPTCHA em todos os idiomas.
Como faço para lidar com o GeeTest em plataformas chinesas como Bilibili?
Extraia o parâmetro gt (estático por site) e o parâmetro challenge (dinâmico por sessão) da origem da página ou de um endpoint de API. Envie ambos para o solucionador GeeTest do CaptchaAI. A resposta inclui os valores challenge, validate e seccode a serem enviados com sua solicitação.
Os proxies são necessários para sites chineses?
Muitos sites chineses realizam verificações geográficas baseadas em IP. O uso de proxies com endereços IP chineses aprimora as taxas de sucesso. Ao passar um proxy para CaptchaAI, use proxies residenciais chineses para obter mais adequado resultados.
Artigos relacionados
- Como resolver o retorno de chamada do Recaptcha V2 usando API
- Resolvendo Captchas Ruby Captchaai API
- Resolvendo Captchas Scala Captchaai Api
Próximas etapas
Comece a resolver CAPTCHAs em sites chineses –obtenha sua chave API CaptchaAIe lidar com qualquer tipo de CAPTCHA chinês.
Guias relacionados: