Hướng Dẫn API

Cách tự động giải quyết CAPTCHA hình ảnh lưới

CAPTCHA hình ảnh lưới hiển thị một hình ảnh lớn được chia thành một lưới (thường là 3 × 3 hoặc 4 × 4) và yêu cầu người dùng chọn các ô phù hợp với mô tả. Mặc dù reCAPTCHA sử dụng định dạng này nhưng nhiều trang web sử dụng thử thách lưới tùy chỉnh không thuộc hệ thống của Google.

Hướng dẫn này đề cập đến việc giải quyết các thách thức về hình ảnh lưới không phải reCAPTCHA bằng cách sử dụng điểm cuối method=grid của CaptchaAI.


Yêu cầu

Mục Giá trị
Khóa API CaptchaAI Từcaptchaai.com
Hình ảnh lưới Ảnh chụp màn hình hoặc base64 của toàn bộ lưới
Ngôn ngữ Python 3.7+ hoặc Node.js 14+

Bước 1: Chụp ảnh lưới

Cách A: Chụp màn hình phần tử captcha

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com/protected-form")

# Screenshot just the captcha container
captcha_element = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
captcha_element.screenshot("captcha_grid.png")

Cách B: Trích xuất hình ảnh từ thuộc tính src

import base64
import requests

captcha_img = driver.find_element(By.CSS_SELECTOR, ".grid-captcha img")
src = captcha_img.get_attribute("src")

if src.startswith("data:image"):
    image_b64 = src.split(",")[1]
else:
    image_data = requests.get(src).content
    image_b64 = base64.b64encode(image_data).decode()

Bước 2: Gửi hình ảnh tới CaptchaAI

Sử dụng tải lên tệp (Python)

import requests
import time

API_KEY = "YOUR_API_KEY"

with open("captcha_grid.png", "rb") as f:
    response = requests.post("https://ocr.captchaai.com/in.php",
        data={
            "key": API_KEY,
            "method": "post",
            "recaptcha": 1,
            "json": 1
        },
        files={"file": f}
    )

data = response.json()
task_id = data["request"]
print(f"Task: {task_id}")

Sử dụng base64 (Python)

response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "post",
    "body": image_b64,
    "recaptcha": 1,
    "json": 1
})

task_id = response.json()["request"]

Node.js

const axios = require('axios');
const fs = require('fs');

async function submitGridCaptcha(imagePath) {
  const imageB64 = fs.readFileSync(imagePath).toString('base64');

  const { data } = await axios.post('https://ocr.captchaai.com/in.php', null, {
    params: {
      key: 'YOUR_API_KEY',
      method: 'post',
      body: imageB64,
      recaptcha: 1,
      json: 1
    }
  });

  return data.request;
}

Bước 3: Thăm dò ý kiến giải pháp

def get_grid_solution(task_id):
    for _ in range(30):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY,
            "action": "get",
            "id": task_id,
            "json": 1
        }).json()

        if result.get("status") == 1:
            return result["request"]
        if result.get("request") != "CAPCHA_NOT_READY":
            raise Exception(f"Error: {result['request']}")

    raise Exception("Timeout")

solution = get_grid_solution(task_id)
print(f"Solution: {solution}")
# Returns click coordinates or cell indices

Bước 4: Áp dụng giải pháp

Nhấp theo chỉ mục ô

# If solution returns cell indices (e.g., "2,5,6")
selected = [int(i) for i in solution.split(",")]
cells = driver.find_elements(By.CSS_SELECTOR, ".grid-cell")

for idx in selected:
    cells[idx - 1].click()
    time.sleep(0.2)

driver.find_element(By.CSS_SELECTOR, ".verify-button").click()

Bấm theo tọa độ

from selenium.webdriver.common.action_chains import ActionChains

# If solution returns coordinates (e.g., "x=120,y=80;x=250,y=200")
captcha_element = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
actions = ActionChains(driver)

for coord in solution.split(";"):
    parts = dict(p.split("=") for p in coord.split(","))
    x, y = int(parts["x"]), int(parts["y"])
    actions.move_to_element_with_offset(captcha_element, x, y).click()

actions.perform()

Khắc phục sự cố

Lỗi nguyên nhân sửa chữa
ERROR_WRONG_FILE_EXTENSION Định dạng hình ảnh không hợp lệ Sử dụng PNG hoặc JPEG; xác minh base64 là hợp lệ
ERROR_CAPTCHA_UNSOLVABLE Hình ảnh quá nhỏ hoặc mờ Chụp ở độ phân giải đầy đủ
Đã chọn sai ô Định dạng giải pháp không khớp Kiểm tra xem giải pháp có phải là chỉ số so với tọa độ không
ERROR_TOO_BIG_CAPTCHA_FILESIZE Hình ảnh vượt quá giới hạn kích thước Thay đổi kích thước xuống dưới 600KB

Ví dụ đầy đủ có thể chạy được

Bạn cần một dự án hoạt động hoàn chỉnh với thiết lập môi trường, bỏ phiếu, thử lại và xử lý lỗi?

Xem ví dụ có thể chạy đầy đủ trên GitHub →


Câu hỏi thường gặp

Khi nào tôi nên sử dụng giải quyết lưới và giải quyết bằng mã thông báo?

Sử dụng tính năng giải mã thông báo (method=userrecaptcha) cho các thử thách reCAPTCHA tiêu chuẩn — cách này đơn giản và đáng tin cậy hơn. Sử dụng tính năng giải lưới (method=post với recaptcha=1) cho các thử thách lưới không reCAPTCHA hoặc lưới hình ảnh độc lập.

Kích thước lưới nào được hỗ trợ?

CaptchaAI xử lý bố cục lưới 3×3, 4×4 và không chuẩn. Hình ảnh được phân tích tổng thể, bất kể cấu trúc lưới.

Giải quyết lưới chính xác đến mức nào?

Độ chính xác phụ thuộc vào chất lượng hình ảnh. Hình ảnh có độ phân giải cao, rõ nét đạt được kết quả tốt nhất. Thời gian giải quyết trung bình là 15–30 giây.

Tôi có thể giải quyết các lưới động nơi các ô thay đổi không?

Đối với lưới động reCAPTCHA (nơi thay thế các ô được nhấp vào), hãy sử dụng phương thức mã thông báo (method=userrecaptcha). Phương pháp lưới giải quyết một hình ảnh tĩnh duy nhất.


Hướng dẫn liên quan

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