تستخدم أمازون صور 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)
أفضل الممارسات لتخريد الأمازون
- استخدم الوكلاء المحليين - تقوم أمازون بحظر عناوين IP لمراكز البيانات بقوة
- تدوير وكلاء المستخدم - استخدم مجموعة من سلاسل المتصفح الواقعية
- الحفاظ على الجلسات - احتفظ بملفات تعريف الارتباط عبر الطلبات
- أضف تأخيرات - 3-10 ثوانٍ بين الطلبات
- تعيين لغة القبول - قم دائمًا بتضمين رؤوس الإعدادات المحلية
- لا تحذف الصفحات التي تم تسجيل الدخول إليها - يمكن الوصول إلى صفحات المنتج دون تسجيل الدخول
استكشاف الأخطاء وإصلاحها
| قضية | إصلاح |
|---|---|
| CAPTCHA على كل طلب | استخدام الوكلاء السكنية. إبطاء معدل الطلب |
| تم رفض حل CAPTCHA | التحقق من تنزيل الصورة بشكل صحيح؛ أعد المحاولة |
| إعادة توجيه الحلقات | التحقق من التعامل مع ملفات تعريف الارتباط؛ استخدم allow_redirects=True |
| بيانات المنتج فارغة | قد تخدم أمازون تخطيطات مختلفة؛ تحقق من المحددات |
الأسئلة الشائعة
هل تستخدم أمازون reCAPTCHA؟
تستخدم أمازون في المقام الأول اختبار CAPTCHA الخاص بها والمعتمد على الصور (نص مشوه). يقوم CaptchaAI بحل هذه المشكلات باستخدام نقطة النهاية method=base64 لحل image/OCR.
كم عدد الطلبات قبل أن تعرض أمازون اختبار CAPTCHA؟
إنه يختلف. باستخدام الوكلاء الجيدين والترويسات الواقعية، يمكنك استخلاص مئات الصفحات. بدون وكلاء، يمكن أن تظهر اختبارات CAPTCHA بعد 10-20 طلبًا.
هل تجريف الأمازون قانوني؟
يعد جمع بيانات المنتج المتاحة للعامة أمرًا قانونيًا بشكل عام، ولكن تحقق من شروط خدمة أمازون والقوانين المعمول بها في ولايتك القضائية.