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

Quét các trang web được bảo vệ bằng CAPTCHA

Hầu hết các trang web có giá trị cao đều sử dụng CAPTCHA như một phần của biện pháp bảo vệ chống bot. Hướng dẫn này bao gồm các chiến lược để thu thập dữ liệu các trang web này một cách đáng tin cậy bằng cách sử dụng CaptchaAI, bao gồm cách xác định các loại CAPTCHA, giải quyết chúng một cách tự động và xây dựng các công cụ thu thập dữ liệu linh hoạt.

Triển khai CAPTCHA phổ biến

CAPTCHA Nơi sử dụng Phương pháp CaptchaAI
reCAPTCHA v2 Các hình thức đăng nhập, trang tìm kiếm method=userrecaptcha
reCAPTCHA v3 Tính điểm nền trên bất kỳ trang nào method=userrecaptcha&version=v3
Cloudflare Turnstile Các trang web đằng sau Cloudflare method=turnstile
Cloudflare Challenge Khối Cloudflare toàn trang method=cloudflare_challenge
Hình ảnh/OCR CAPTCHA Các trang web kế thừa, Amazon method=base64
hCaptcha Các trang web tập trung vào quyền riêng tư method=hcaptcha

Chiến lược 1: Phát hiện và giải quyết theo yêu cầu

Cách tiếp cận đáng tin cậy nhất – quét bình thường và chỉ giải CAPTCHA khi chúng xuất hiện:

import requests
import time
from bs4 import BeautifulSoup

API_KEY = "YOUR_API_KEY"

class ProtectedScraper:
    def __init__(self):
        self.session = requests.Session()
        self.session.headers.update({
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        })

    def scrape(self, url):
        resp = self.session.get(url)

        # Check for CAPTCHA
        if self._has_captcha(resp.text):
            resp = self._handle_captcha(resp.text, url)

        return resp.text

    def _has_captcha(self, html):
        indicators = ["g-recaptcha", "cf-turnstile", "h-captcha", "captcha"]
        return any(ind in html.lower() for ind in indicators)

    def _handle_captcha(self, html, url):
        soup = BeautifulSoup(html, "html.parser")

        # reCAPTCHA v2
        rc = soup.find("div", class_="g-recaptcha")
        if rc:
            token = self._solve_recaptcha(rc["data-sitekey"], url)
            return self.session.post(url, data={"g-recaptcha-response": token})

        # Cloudflare Turnstile
        ts = soup.find("div", class_="cf-turnstile")
        if ts:
            token = self._solve_turnstile(ts["data-sitekey"], url)
            return self.session.post(url, data={"cf-turnstile-response": token})

        raise Exception("Unknown CAPTCHA type")

    def _solve_recaptcha(self, site_key, page_url):
        resp = requests.get("https://ocr.captchaai.com/in.php", params={
            "key": API_KEY, "method": "userrecaptcha",
            "googlekey": site_key, "pageurl": page_url
        })
        return self._poll(resp.text.split("|")[1])

    def _solve_turnstile(self, site_key, page_url):
        resp = requests.get("https://ocr.captchaai.com/in.php", params={
            "key": API_KEY, "method": "turnstile",
            "sitekey": site_key, "pageurl": page_url
        })
        return self._poll(resp.text.split("|")[1])

    def _poll(self, task_id):
        for _ in range(60):
            time.sleep(5)
            result = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": API_KEY, "action": "get", "id": task_id
            })
            if result.text == "CAPCHA_NOT_READY": continue
            if result.text.startswith("OK|"): return result.text.split("|")[1]
            raise Exception(result.text)
        raise TimeoutError()

# Usage
scraper = ProtectedScraper()
html = scraper.scrape("https://example.com/data")

Chiến lược 2: Giải quyết trước các trang CAPTCHA đã biết

Nếu bạn biết trang nào luôn có CAPTCHA, hãy giải quyết trước:

def scrape_known_captcha_page(url, site_key):
    # Solve before even loading the page
    token = solve_recaptcha(site_key, url)

    # Submit directly with token
    resp = requests.post(url, data={
        "g-recaptcha-response": token,
        "query": "search term"
    })
    return resp.text

Chiến lược 3: Các trang web được bảo vệ bằng Cloudflare

Các trang web đằng sau Cloudflare thường yêu cầu cookie <staging-session-cookie>:

def get_cloudflare_clearance(url, proxy):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "cloudflare_challenge",
        "pageurl": url,
        "proxy": proxy,
        "proxytype": "HTTP"
    })
    task_id = resp.text.split("|")[1]

    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY": continue
        if "<staging-session-cookie>" in result.text:
            # Parse <staging-session-cookie> and user_agent from response
            return result.text
    raise TimeoutError()

Mẫu quét nhiều trang

def scrape_multiple_pages(base_url, site_key, pages):
    scraper = ProtectedScraper()
    results = []

    for page in pages:
        url = f"{base_url}?page={page}"
        try:
            html = scraper.scrape(url)
            soup = BeautifulSoup(html, "html.parser")
            items = soup.find_all("div", class_="item")
            results.extend([item.text.strip() for item in items])
            print(f"Page {page}: {len(items)} items")
        except Exception as e:
            print(f"Page {page} failed: {e}")

        time.sleep(random.uniform(2, 5))

    return results

Khắc phục sự cố

vấn đề sửa chữa
CAPTCHA xuất hiện trên mọi trang Sử dụng proxy; giảm tỷ lệ yêu cầu
Mã thông báo bị từ chối sau khi giải quyết Mã thông báo có thể đã hết hạn; sử dụng trong vòng 120s
Chặn Cloudflare mặc dù đã giải phóng mặt bằng Sử dụng cùng một proxy và tác nhân người dùng cho tất cả các yêu cầu
Trang web trả về trang khác sau khi giải quyết Kiểm tra các chuyển hướng hoặc cookie bổ sung

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

Những trang web nào khó cạo nhất?

Các trang web sử dụng Cloudflare Enterprise, PerimeterX hoặc Akamai Bot Manager là những trang thách thức nhất. CaptchaAI xử lý các thành phần CAPTCHA của chúng; kết hợp với các trình duyệt và proxy ẩn để có kết quả tốt nhất.

Tôi có thể xóa các trang web yêu cầu đăng nhập không?

Vâng. Trước tiên hãy đăng nhập (giải bất kỳ CAPTCHA đăng nhập nào), duy trì cookie phiên, sau đó loại bỏ các trang đã được xác thực. CaptchaAI xử lý CAPTCHA ở mọi giai đoạn.

Làm cách nào để xử lý các trang được hiển thị bằng JavaScript?

Sử dụng Selenium, Puppeteer hoặc Playwright để hiển thị JavaScript, sau đó trích xuất các tham số CAPTCHA và giải quyết thông qua CaptchaAI. Nhìn thấyXử lý CAPTCHA của Selenium.

Hướng dẫn liên quan

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