تستخدم معظم مواقع الويب ذات القيمة العالية اختبارات 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.