Trường Hợp Sử Dụng

Giải CAPTCHA trên các trang web Trung Quốc bằng CaptchaAI

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 gtchallenge 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, validateseccode để 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á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:

Os comentários estão desativados para este artigo.