حالات الاستخدام

تجريف المواقع المحمية بـ CAPTCHA

تستخدم معظم مواقع الويب ذات القيمة العالية اختبارات CAPTCHA كجزء من دفاعها ضد الروبوتات. يغطي هذا الدليل إستراتيجيات استخراج هذه المواقع بشكل موثوق باستخدام CaptchaAI، بما في ذلك كيفية تحديد أنواع اختبار CAPTCHA، وحلها تلقائيًا، وإنشاء كاشطات مرنة.

تطبيقات CAPTCHA الشائعة

اختبار CAPTCHA حيث تستخدم طريقة CaptchaAI
reCAPTCHA v2 نماذج تسجيل الدخول، صفحات البحث method=userrecaptcha
reCAPTCHA v3 سجل الخلفية على أي صفحة method=userrecaptcha&version=v3
Cloudflare Turnstile المواقع وراء Cloudflare method=turnstile
Cloudflare Challenge كتلة Cloudflare لصفحة كاملة method=cloudflare_challenge
Image/OCR CAPTCHA المواقع القديمة، أمازون method=base64
hCaptcha المواقع التي تركز على الخصوصية method=hcaptcha

الإستراتيجية 1: الكشف والحل عند الطلب

الطريقة الأكثر موثوقية هي التخلص من اختبارات CAPTCHA بشكل طبيعي وحلها فقط عند ظهورها:

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")

الإستراتيجية 2: الحل المسبق لصفحات CAPTCHA المعروفة

إذا كنت تعرف الصفحات التي تحتوي دائمًا على اختبارات CAPTCHA، فقم بحل المشكلة بشكل استباقي:

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

الإستراتيجية 3: المواقع المحمية بواسطة Cloudflare

غالبًا ما تتطلب المواقع التي تدعم Cloudflare ملف تعريف الارتباط cf_clearance:

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 "cf_clearance" in result.text:
            # Parse cf_clearance and user_agent from response
            return result.text
    raise TimeoutError()

نمط تجريف متعدد الصفحات

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

استكشاف الأخطاء وإصلاحها

قضية إصلاح
يظهر اختبار CAPTCHA في كل صفحة استخدام الوكلاء؛ تقليل معدل الطلب
تم رفض الرمز المميز بعد الحل ربما انتهت صلاحية الرمز المميز؛ استخدم في غضون 120 ثانية
كتل Cloudflare على الرغم من التخليص استخدم نفس الوكيل ووكيل المستخدم لجميع الطلبات
يقوم الموقع بإرجاع صفحة مختلفة بعد الحل تحقق من عمليات إعادة التوجيه أو ملفات تعريف الارتباط الإضافية

الأسئلة الشائعة

ما هي المواقع التي يصعب كشطها؟

تعد المواقع التي تستخدم Cloudflare Enterprise، أو PerimeterX، أو Akamai Bot Manager هي الأكثر تحديًا. يتعامل CaptchaAI مع مكونات CAPTCHA الخاصة به؛ تتحد مع المتصفحات الخفية والوكلاء للحصول على أفضل النتائج.

هل يمكنني حذف المواقع التي تتطلب تسجيل الدخول؟

نعم. قم بتسجيل الدخول أولاً (حل أي اختبار CAPTCHA لتسجيل الدخول)، واحتفظ بملفات تعريف الارتباط للجلسة، ثم امسح الصفحات المصادق عليها. يتعامل CaptchaAI مع اختبار CAPTCHA في أي مرحلة.

كيف أتعامل مع الصفحات التي يتم عرضها بواسطة JavaScript؟

استخدم Selenium أو Puppeteer أو Playwright لعرض JavaScript، ثم استخرج معلمات CAPTCHA وحلها عبر CaptchaAI. يرىالتعامل مع السيلينيوم CAPTCHA.

أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.