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

جمع بيانات موقع البيع بالتجزئة من خلال معالجة اختبار CAPTCHA

تستخدم أمازون صور CAPTCHAs لمنع الوصول الآلي. عندما تصل إلى حد مكافحة الروبوتات، سترى صفحة تطلب منك كتابة أحرف من صورة مشوهة. يعالج حل التعرف الضوئي على الحروف (OCR) الخاص بـ CaptchaAI هذه الأمور تلقائيًا.

كيف يعمل اختبار CAPTCHA الخاص بأمازون

تقوم أمازون بتشغيل اختبارات CAPTCHA بناءً على:

إشارة الوصف
حجم الطلب هناك عدد كبير جدًا من الطلبات من عنوان IP واحد في نافذة قصيرة
ملفات تعريف الارتباط مفقودة لا توجد ملفات تعريف الارتباط لجلسة أمازون
رؤوس مشبوهة وكيل مستخدم يشبه الروبوت أو الرؤوس المفقودة
سمعة عنوان IP مراكز البيانات المعروفة أو نطاقات IP الوكيل

عند تشغيله، تقوم أمازون بإعادة التوجيه إلى صفحة تحتوي على صورة نصية مشوهة وحقل إدخال. يجب عليك حل الصورة وإرسال النص للمتابعة.

المتطلبات

المتطلبات التفاصيل
مفتاح CaptchaAI API منcaptchaai.com
بايثون 3.7+ مع الطلبات والشوربة الجميلة4
وكلاء السكنية يوصى به للكشط المستمر

حل صورة CAPTCHA الخاصة بأمازون

الخطوة 1: اكتشاف صفحة CAPTCHA

import requests
from bs4 import BeautifulSoup

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
})

def is_captcha_page(html):
    return "Type the characters you see in this image" in html or \
           "captcha" in html.lower()

url = "https://www.amazon.com/dp/B0EXAMPLE"
resp = session.get(url)

if is_captcha_page(resp.text):
    print("CAPTCHA detected!")
else:
    print("Page loaded successfully")

الخطوة 2: استخراج الصورة وحلها

import base64

API_KEY = "YOUR_API_KEY"

def solve_amazon_captcha(session, captcha_page_html, captcha_page_url):
    soup = BeautifulSoup(captcha_page_html, "html.parser")

    # Find the CAPTCHA image
    img_tag = soup.find("img", src=lambda s: s and "captcha" in s.lower())
    if not img_tag:
        raise Exception("CAPTCHA image not found")

    img_url = img_tag["src"]

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

    # Submit to CaptchaAI
    submit_resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "base64",
        "body": img_base64
    })
    task_id = submit_resp.text.split("|")[1]

    # Poll for result
    import time
    for _ in range(30):
        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(f"Solve error: {result.text}")

    raise TimeoutError("Solve timed out")

الخطوة 3: أرسل الحل

def submit_captcha_solution(session, captcha_page_html, solution, captcha_page_url):
    soup = BeautifulSoup(captcha_page_html, "html.parser")
    form = soup.find("form")

    # Build form data
    form_data = {}
    for inp in form.find_all("input"):
        name = inp.get("name")
        if name:
            form_data[name] = inp.get("value", "")

    # Set the CAPTCHA answer
    form_data["field-keywords"] = solution

    # Submit
    action = form.get("action", captcha_page_url)
    if action.startswith("/"):
        from urllib.parse import urljoin
        action = urljoin(captcha_page_url, action)

    resp = session.post(action, data=form_data)
    return resp

مثال العمل الكامل

import requests
import base64
import time
from bs4 import BeautifulSoup

API_KEY = "YOUR_API_KEY"

def scrape_amazon_product(url):
    session = requests.Session()
    session.headers.update({
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
        "Accept-Language": "en-US,en;q=0.9"
    })

    resp = session.get(url)

    # Handle CAPTCHA if present
    if "captcha" in resp.text.lower():
        soup = BeautifulSoup(resp.text, "html.parser")
        img = soup.find("img", src=lambda s: s and "captcha" in s.lower())

        if img:
            # Download and solve
            img_data = session.get(img["src"]).content
            img_b64 = base64.b64encode(img_data).decode()

            submit = requests.get("https://ocr.captchaai.com/in.php", params={
                "key": API_KEY, "method": "base64", "body": img_b64
            })
            task_id = submit.text.split("|")[1]

            for _ in range(30):
                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|"):
                    solution = result.text.split("|")[1]
                    break

            # Submit solution
            form = soup.find("form")
            form_data = {inp.get("name"): inp.get("value", "")
                        for inp in form.find_all("input") if inp.get("name")}
            form_data["field-keywords"] = solution

            action = form.get("action", url)
            resp = session.post(action, data=form_data)

    # Parse product data
    soup = BeautifulSoup(resp.text, "html.parser")
    title = soup.find("span", {"id": "productTitle"})
    price = soup.find("span", class_="a-price-whole")

    return {
        "title": title.text.strip() if title else None,
        "price": price.text.strip() if price else None
    }

product = scrape_amazon_product("https://www.amazon.com/dp/B0EXAMPLE")
print(product)

أفضل الممارسات لتخريد الأمازون

  1. استخدم الوكلاء المحليين - تقوم أمازون بحظر عناوين IP لمراكز البيانات بقوة
  2. تدوير وكلاء المستخدم - استخدم مجموعة من سلاسل المتصفح الواقعية
  3. الحفاظ على الجلسات - احتفظ بملفات تعريف الارتباط عبر الطلبات
  4. أضف تأخيرات - 3-10 ثوانٍ بين الطلبات
  5. تعيين لغة القبول - قم دائمًا بتضمين رؤوس الإعدادات المحلية
  6. لا تحذف الصفحات التي تم تسجيل الدخول إليها - يمكن الوصول إلى صفحات المنتج دون تسجيل الدخول

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

قضية إصلاح
CAPTCHA على كل طلب استخدام الوكلاء السكنية. إبطاء معدل الطلب
تم رفض حل CAPTCHA التحقق من تنزيل الصورة بشكل صحيح؛ أعد المحاولة
إعادة توجيه الحلقات التحقق من التعامل مع ملفات تعريف الارتباط؛ استخدم allow_redirects=True
بيانات المنتج فارغة قد تخدم أمازون تخطيطات مختلفة؛ تحقق من المحددات

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

هل تستخدم أمازون reCAPTCHA؟

تستخدم أمازون في المقام الأول اختبار CAPTCHA الخاص بها والمعتمد على الصور (نص مشوه). يقوم CaptchaAI بحل هذه المشكلات باستخدام نقطة النهاية method=base64 لحل image/OCR.

كم عدد الطلبات قبل أن تعرض أمازون اختبار CAPTCHA؟

إنه يختلف. باستخدام الوكلاء الجيدين والترويسات الواقعية، يمكنك استخلاص مئات الصفحات. بدون وكلاء، يمكن أن تظهر اختبارات CAPTCHA بعد 10-20 طلبًا.

هل تجريف الأمازون قانوني؟

يعد جمع بيانات المنتج المتاحة للعامة أمرًا قانونيًا بشكل عام، ولكن تحقق من شروط خدمة أمازون والقوانين المعمول بها في ولايتك القضائية.

أدلة ذات صلة

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