Use Cases

Quét CAPTCHA bằng Python: Hướng dẫn đầy đủ

Thư viện requests của Python xử lý HTTP hiệu quả nhưng CAPTCHA yêu cầu bộ giải bên ngoài. Hướng dẫn này chỉ ra cách tích hợp CaptchaAI vào tập lệnh quét Python - hầu hết các trang web không cần trình duyệt.

Yêu cầu

Yêu cầu Chi tiết
Python 3.7+ Với pip
yêu cầu pip install requests
beautifulsoup4 pip install beautifulsoup4
Khóa API CaptchaAI Từcaptchaai.com

Lớp người trợ giúp CaptchaAI

Xây dựng lớp bộ giải có thể sử dụng lại cho các dự án Python của bạn:

import requests
import time

class CaptchaSolver:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base = "https://ocr.captchaai.com"

    def _submit(self, params):
        params["key"] = self.api_key
        resp = requests.get(f"{self.base}/in.php", params=params)
        if not resp.text.startswith("OK|"):
            raise Exception(f"Submit error: {resp.text}")
        return resp.text.split("|")[1]

    def _poll(self, task_id, timeout=300):
        deadline = time.time() + timeout
        while time.time() < deadline:
            time.sleep(5)
            resp = requests.get(f"{self.base}/res.php", params={
                "key": self.api_key,
                "action": "get",
                "id": task_id
            })
            if resp.text == "CAPCHA_NOT_READY":
                continue
            if resp.text.startswith("OK|"):
                return resp.text.split("|")[1]
            raise Exception(f"Solve error: {resp.text}")
        raise TimeoutError("Solve timed out")

    def solve_recaptcha_v2(self, site_key, page_url):
        task_id = self._submit({
            "method": "userrecaptcha",
            "googlekey": site_key,
            "pageurl": page_url
        })
        return self._poll(task_id)

    def solve_recaptcha_v3(self, site_key, page_url, action="verify"):
        task_id = self._submit({
            "method": "userrecaptcha",
            "googlekey": site_key,
            "pageurl": page_url,
            "version": "v3",
            "action": action
        })
        return self._poll(task_id)

    def solve_turnstile(self, site_key, page_url):
        task_id = self._submit({
            "method": "turnstile",
            "sitekey": site_key,
            "pageurl": page_url
        })
        return self._poll(task_id)

    def solve_image(self, image_base64):
        task_id = self._submit({
            "method": "base64",
            "body": image_base64
        })
        return self._poll(task_id)

Quét biểu mẫu được bảo vệ bằng reCAPTCHA

from bs4 import BeautifulSoup
import requests

solver = CaptchaSolver("YOUR_API_KEY")
session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})

# Step 1: Load the page
url = "https://example.com/search"
page = session.get(url)
soup = BeautifulSoup(page.text, "html.parser")

# Step 2: Extract the site key
recaptcha_div = soup.find("div", class_="g-recaptcha")
site_key = recaptcha_div["data-sitekey"]

# Step 3: Solve the CAPTCHA
token = solver.solve_recaptcha_v2(site_key, url)

# Step 4: Submit the form with the token
form_data = {
    "q": "search term",
    "g-recaptcha-response": token
}
result = session.post(url, data=form_data)

# Step 5: Parse the results
result_soup = BeautifulSoup(result.text, "html.parser")
items = result_soup.find_all("div", class_="result-item")
for item in items:
    print(item.text.strip())

Quét nhiều trang

Đối với kết quả được phân trang đằng sau CAPTCHA:

def scrape_all_pages(base_url, site_key, max_pages=10):
    solver = CaptchaSolver("YOUR_API_KEY")
    session = requests.Session()
    session.headers.update({
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    })
    all_results = []

    for page_num in range(1, max_pages + 1):
        page_url = f"{base_url}?page={page_num}"

        # Solve CAPTCHA for each page if needed
        token = solver.solve_recaptcha_v2(site_key, page_url)

        resp = session.get(page_url, params={
            "g-recaptcha-response": token,
            "page": page_num
        })

        soup = BeautifulSoup(resp.text, "html.parser")
        items = soup.find_all("div", class_="item")

        if not items:
            break

        all_results.extend([item.text.strip() for item in items])
        print(f"Page {page_num}: {len(items)} items")

        time.sleep(2)  # Polite delay

    return all_results

Xử lý CAPTCHA hình ảnh

Đối với các trang web có CAPTCHA văn bản dựa trên hình ảnh:

import base64

def scrape_with_image_captcha(url):
    solver = CaptchaSolver("YOUR_API_KEY")
    session = requests.Session()

    page = session.get(url)
    soup = BeautifulSoup(page.text, "html.parser")

    # Find the CAPTCHA image
    captcha_img = soup.find("img", {"id": "captcha-image"})
    captcha_url = captcha_img["src"]

    # Download and encode the image
    img_resp = session.get(captcha_url)
    img_base64 = base64.b64encode(img_resp.content).decode()

    # Solve
    captcha_text = solver.solve_image(img_base64)

    # Submit
    form_data = {
        "captcha": captcha_text,
        "username": "user"
    }
    result = session.post(url, data=form_data)
    return result.text

Xử lý lỗi và thử lại

Thêm logic thử lại cho các trình dọn dẹp sản xuất:

def solve_with_retry(solver, site_key, page_url, max_retries=3):
    for attempt in range(max_retries):
        try:
            return solver.solve_recaptcha_v2(site_key, page_url)
        except Exception as e:
            if attempt == max_retries - 1:
                raise
            print(f"Attempt {attempt + 1} failed: {e}. Retrying...")
            time.sleep(2)

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
ERROR_WRONG_USER_KEY Khóa API không hợp lệ Xác minh khóa từ bảng điều khiển
ERROR_ZERO_BALANCE Không có tiền Nạp tiền vào tài khoản của bạn
Việc gửi biểu mẫu sẽ trả lại trang CAPTCHA Mã thông báo đã hết hạn hoặc tên trường sai Sử dụng token ngay lập tức; kiểm tra tên trường biểu mẫu
ConnectionError Sự cố mạng Thêm logic thử lại với thời gian chờ theo cấp số nhân
Kết quả trống sau khi gửi Trang web yêu cầu cookie/session Sử dụng requests.Session() để duy trì cookie

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

Tôi có cần Selenium để quét CAPTCHA bằng Python không?

Không phải lúc nào cũng vậy. Nếu biểu mẫu của trang web hoạt động với các yêu cầu HTTP POST tiêu chuẩn thì requests + CaptchaAI sẽ nhanh hơn và nhẹ hơn Selenium. Chỉ sử dụng Selenium khi trang web yêu cầu hiển thị JavaScript.

Tôi có thể giải CAPTCHA một cách không đồng bộ không?

Đúng. Sử dụng aiohttp với API của CaptchaAI cho quy trình làm việc không đồng bộ. Nhìn thấyTích hợp aiohttp + CaptchaAI.

Làm cách nào để xử lý giới hạn tỷ lệ?

Thêm độ trễ giữa các yêu cầu (time.sleep(2-5)), xoay proxy và sử dụng các tiêu đề thực tế. Nhìn thấyXoay vòng proxy để quét CAPTCHA.

Hướng dẫn liên quan

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

Postagens relacionadas

Use Cases Quét web nghiên cứu học thuật bằng cách giải CAPTCHA
Hướng dẫn thực hành về Quét nghiên cứu web học thuật bằng cách giải CAPTCHA, với các tình huống thực tế, lời khuyên về quy trình làm việc và các bước có thể thự...

Hướng dẫn thực hành về Quét nghiên cứu web học thuật bằng cách giải CAPTCHA, với các tình huống thực tế, lời k...

Apr 22, 2026
Reference Tính bền vững phiên trình duyệt cho luồng QA CAPTCHA của bạn
Duy trì phiên trình duyệt qua nhiều bước trong kiểm thử QA CAPTCHA trên staging của bạn để giảm gián đoạn và tăng độ tái lập.

Duy trì phiên trình duyệt qua nhiều bước trong kiểm thử QA CAPTCHA trên staging của bạn để giảm gián đoạn và t...

Apr 30, 2026
API Tutorials Hướng dẫn BLS CAPTCHA và tham số mã Tìm hiểu sâu
Hướng dẫn từng bước về Hướng dẫn BLS CAPTCHA và tham số mã Tìm hiểu sâu, với các ví dụ có thể sử dụng lại trực tiếp và quy trình làm việc Captcha AI rõ ràng.

Hướng dẫn từng bước về Hướng dẫn BLS CAPTCHA và tham số mã Tìm hiểu sâu, với các ví dụ có thể sử dụng lại trực...

Apr 27, 2026