CAPTCHA hình ảnh lưới (thử thách hình ảnh reCAPTCHA v2) trả về các chỉ mục ô làm giải pháp. Khi các ô được trả về sai — nhấp sai ô hoặc nhận được ERROR_CAPTCHA_UNSOLVABLE — vấn đề thường nằm ở cách bạn gửi hình ảnh, tham số kích thước lưới hoặc văn bản hướng dẫn.
Cách giải quyết hình ảnh lưới hoạt động
CaptchaAI nhận hình ảnh lưới của bạn, phân tích từng ô và trả về một loạt chỉ mục phù hợp với hướng dẫn. Các ô được đánh số từ trái sang phải, từ trên xuống dưới:
3×3 Grid: 4×4 Grid:
1 2 3 1 2 3 4
4 5 6 5 6 7 8
7 8 9 9 10 11 12
13 14 15 16
Phản hồi có dạng: [1, 3, 6, 9] - nghĩa là các ô 1, 3, 6 và 9 chứa các đối tượng mục tiêu.
Các lỗi thường gặp và cách khắc phục
Kích thước lưới sai
Lỗi tọa độ phổ biến nhất. Nếu CAPTCHA ở dạng lưới 4×4 nhưng bạn gửi grid_size=3x3 thì việc đánh số ô sẽ sai và các ô xếp sai sẽ được chọn.
# WRONG — 4×4 grid sent as 3×3
data = {
"key": "YOUR_API_KEY",
"method": "post",
"grid_size": "3x3", # Wrong!
"img_type": "recaptcha",
"instructions": "traffic lights",
"json": 1
}
# CORRECT — match the actual grid
data = {
"key": "YOUR_API_KEY",
"method": "post",
"grid_size": "4x4", # Correct
"img_type": "recaptcha",
"instructions": "traffic lights",
"json": 1
}
Cách phát hiện kích thước lưới theo chương trình:
from PIL import Image
img = Image.open("grid_captcha.png")
width, height = img.size
# reCAPTCHA grids are square. 3×3 tiles are ~100px each, 4×4 tiles are ~75px each
tile_width = width // 3
if width % 4 == 0 and (width // 4) < 100:
grid_size = "4x4"
else:
grid_size = "3x3"
print(f"Detected grid size: {grid_size}")
Hình ảnh bị cắt hoặc sửa đổi
Việc gửi hình ảnh đã cắt, thay đổi kích thước hoặc bọc ảnh chụp màn hình sẽ thay đổi cách căn chỉnh lưới. CaptchaAI cần hình ảnh CAPTCHA gốc chính xác như được hiển thị.
Khắc phục: Chụp ảnh trực tiếp từ iframe reCAPTCHA, không phải ảnh chụp màn hình toàn trang.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
# Switch to reCAPTCHA iframe
iframe = driver.find_element(By.CSS_SELECTOR, 'iframe[title*="recaptcha"]')
driver.switch_to.frame(iframe)
# Get the grid image element
grid_img = driver.find_element(By.CSS_SELECTOR, "img.rc-image-tile-wrapper img")
grid_img.screenshot("grid_captcha.png") # Captures just the grid, not the whole page
Hướng dẫn sai hoặc mơ hồ
Văn bản hướng dẫn phải khớp với nội dung CAPTCHA yêu cầu. Hướng dẫn mơ hồ dẫn đến lựa chọn ô sai.
# WRONG — too vague
data["instructions"] = "select images"
# CORRECT — specific instruction from the CAPTCHA
data["instructions"] = "crosswalks"
Các giá trị lệnh phổ biến: crosswalks, traffic lights, cars, buses, motorcycles, bicycles, fire hydrants, stairs, bridges, parking meters.
Độ lệch chỉ số ô (dựa trên 0 so với dựa trên 1)
CaptchaAI trả về các chỉ số ô dựa trên 1. Nếu mã tự động hóa của bạn sử dụng chỉ mục dựa trên 0 thì bạn cần trừ đi 1.
import json
# CaptchaAI returns 1-based indices
solution = json.loads(result["request"]) # e.g., [1, 3, 6, 9]
# Convert to 0-based for Selenium click automation
zero_based = [cell - 1 for cell in solution]
# Click grid cells using 0-based index
tiles = driver.find_elements(By.CSS_SELECTOR, ".rc-image-tile-wrapper img")
for idx in zero_based:
tiles[idx].click()
Vấn đề về định dạng hình ảnh
CaptchaAI hỗ trợ JPG, JPEG, PNG và GIF. Các định dạng khác trả về ERROR_WRONG_FILE_EXTENSION.
# WRONG — WebP or BMP
files = {"file": open("grid.webp", "rb")} # Not supported
# CORRECT — convert to PNG first
from PIL import Image
img = Image.open("grid.webp")
img.save("grid.png", "PNG")
files = {"file": open("grid.png", "rb")}
Cây quyết định
Grid cells are wrong
↓
Is grid_size correct (3x3 or 4x4)? → No → Fix grid_size parameter
↓ Yes
Is the image the original CAPTCHA (not cropped)? → No → Capture directly from iframe
↓ Yes
Is instruction text specific? → No → Use exact CAPTCHA instruction text
↓ Yes
Using 1-based indexing for clicks? → No → Convert solution to 0-based
↓ Yes
Image in supported format (JPG/PNG)? → No → Convert image format
↓ Yes
Report tiles to CaptchaAI via reportbad
Báo cáo giải pháp sai
Nếu tọa độ liên tục sai mặc dù tham số chính xác, hãy báo cáo giải pháp:
requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "reportbad",
"id": task_id,
"json": 1
})
Điều này giúp CaptchaAI cải thiện độ chính xác và có thể hoàn lại chi phí giải.
Kiểm tra xác thực lưới
- Xác nhận kích thước lưới khớp với tọa độ mà mục tiêu mong đợi trước khi gửi bất kỳ câu trả lời nào.
- Bình thường hóa tỷ lệ hình ảnh và phép toán khung nhìn để các điểm nhấp vẫn tồn tại khi thay đổi tỷ lệ pixel của trình duyệt và tỷ lệ pixel của thiết bị.
- Từ chối các phản hồi nằm ngoài lưới đã khai báo thay vì âm thầm chuyển tiếp tọa độ xấu.
Câu hỏi thường gặp
CaptchaAI hỗ trợ kích thước lưới nào?
Lưới 3×3 và 4×4. Đây là các định dạng thử thách hình ảnh reCAPTCHA tiêu chuẩn.
Tại sao tôi nhận được ERROR_CAPTCHA_UNSOLVABLE cho hình ảnh lưới?
Chất lượng hình ảnh quá thấp, văn bản hướng dẫn sai hoặc hình ảnh không phải là CAPTCHA dạng lưới có thể nhận dạng được. Xác minh rằng bạn đang gửi hình ảnh gốc, chưa cắt xén theo đúng hướng dẫn.
Các tế bào của tôi được bù đắp bằng một. Có chuyện gì vậy?
CaptchaAI trả về các chỉ số dựa trên 1. Nếu mã của bạn mong đợi dựa trên 0, hãy trừ 1 từ mỗi chỉ mục.
Giải CAPTCHA hình ảnh lưới bằng CaptchaAI
Nhận giải pháp hình ảnh lưới chính xác tạicaptchaai.com.
Hướng dẫn liên quan
- Cách giải quyết Grid Image CAPTCHA bằng API
- Tham khảo mã lỗi CaptchaAI
- Tối ưu hóa chất lượng câu trả lời sai CAPTCHA hình ảnh
- Xác thực yêu cầu ERROR_BAD_PARAMETERS