تستخدم Google reCAPTCHA لحماية نتائج البحث والخدمات الأخرى من الوصول الآلي. عند تشغيله، سترى تحدي reCAPTCHA v2 أو v3 الذي يمنع المزيد من الطلبات. تعمل CaptchaAI على حل هذه التحديات حتى تتمكن مكشطةك من الاستمرار.
كيف يكتشف جوجل كاشطات
| إشارة | الوصف |
|---|---|
| معدل الاستعلام | عمليات بحث كثيرة جدًا من عنوان IP واحد |
| سمعة عنوان IP | مركز البيانات أو عناوين IP للوكيل التي تم وضع علامة عليها |
| غياب ملفات تعريف الارتباط | لا توجد ملفات تعريف الارتباط لجلسة جوجل |
| الأنماط السلوكية | أنماط استعلام متطابقة، بدون وقت للسكون |
| بصمة JavaScript | مؤشرات بيئة المتصفح مفقودة |
يقدم Google عادةً استجابة 429 Too Many Requests أو يعيد التوجيه إلى صفحة تحدي reCAPTCHA على google.com/sorry/.
المتطلبات
| المتطلبات | التفاصيل |
|---|---|
| مفتاح CaptchaAI API | منcaptchaai.com |
| بايثون 3.7+ | مع الطلبات |
| وكلاء السكنية | ينصح بشدة |
حل اختبار reCAPTCHA في Google
الخطوة 1: كشف اختبار CAPTCHA
import requests
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("https://www.google.com/search?q=example")
if "sorry" in resp.url or resp.status_code == 429:
print("CAPTCHA triggered!")
captcha_url = resp.url
else:
print("Results loaded")
الخطوة 2: استخراج مفتاح الموقع
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, "html.parser")
# Google uses data-sitekey on the reCAPTCHA div
recaptcha = soup.find("div", {"data-sitekey": True})
if recaptcha:
site_key = recaptcha["data-sitekey"]
print(f"Site key: {site_key}")
الخطوة 3: حل باستخدام CaptchaAI
import time
API_KEY = "YOUR_API_KEY"
def solve_google_recaptcha(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
})
if not resp.text.startswith("OK|"):
raise Exception(f"Submit error: {resp.text}")
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 result.text.startswith("OK|"):
return result.text.split("|")[1]
raise Exception(f"Error: {result.text}")
raise TimeoutError("Timed out")
token = solve_google_recaptcha(site_key, captcha_url)
الخطوة 4: إرسال الرمز المميز
# Find the form action URL and hidden fields
form = soup.find("form")
form_data = {}
for inp in form.find_all("input", {"name": True}):
form_data[inp["name"]] = inp.get("value", "")
form_data["g-recaptcha-response"] = token
action = form.get("action", "")
if action.startswith("/"):
action = f"https://www.google.com{action}"
result = session.post(action, data=form_data)
print(f"Redirected to: {result.url}")
مكشطة كاملة مع معالجة CAPTCHA
import requests
import time
from bs4 import BeautifulSoup
API_KEY = "YOUR_API_KEY"
def solve_captcha(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
})
task_id = resp.text.split("|")[1]
for _ in range(60):
time.sleep(5)
r = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id
})
if r.text == "CAPCHA_NOT_READY": continue
if r.text.startswith("OK|"): return r.text.split("|")[1]
raise TimeoutError()
def google_search(query, num_results=10):
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("https://www.google.com/search", params={
"q": query, "num": num_results
})
# Handle CAPTCHA
if "sorry" in resp.url or resp.status_code == 429:
soup = BeautifulSoup(resp.text, "html.parser")
rc = soup.find("div", {"data-sitekey": True})
if rc:
token = solve_captcha(rc["data-sitekey"], resp.url)
form = soup.find("form")
data = {i["name"]: i.get("value", "")
for i in form.find_all("input", {"name": True})}
data["g-recaptcha-response"] = token
action = form.get("action", resp.url)
if action.startswith("/"):
action = f"https://www.google.com{action}"
resp = session.post(action, data=data)
# Parse results
soup = BeautifulSoup(resp.text, "html.parser")
results = []
for div in soup.find_all("div", class_="g"):
link = div.find("a")
title = div.find("h3")
if link and title:
results.append({
"title": title.text,
"url": link.get("href")
})
return results
results = google_search("best captcha solving api")
for r in results:
print(f"{r['title']}: {r['url']}")
أفضل الممارسات
- استخدم الوكلاء المحليين - تقوم Google بحظر عناوين IP لمراكز البيانات على الفور
- توقيت الاستعلام بشكل عشوائي - انتظر من 5 إلى 15 ثانية بين عمليات البحث
- تنوع وكلاء المستخدم - قم بالتدوير من خلال سلاسل وكيل المستخدم الواقعية للمتصفح
- الحد الأقصى للحجم - احتفظ بالاستعلامات أقل من 100/hour لكل IP
- استخدام النطاقات المترجمة - قم بمطابقة منطقة الوكيل الخاصة بك مع نطاق Google
استكشاف الأخطاء وإصلاحها
| قضية | إصلاح |
|---|---|
| CAPTCHA على كل طلب | التبديل إلى الوكلاء السكنيين؛ خفض معدل |
| لم يتم العثور على مفتاح موقع reCAPTCHA | ربما قامت Google بتغيير تخطيط صفحة التحدي |
| تم قبول الرمز المميز ولكن لا يزال محظورًا | قد تطلب Google عملية تحقق إضافية؛ حاول وكيل مختلف |
| صفحة النتائج فارغة | تحقق مما إذا كانت Google قد قدمت تخطيطًا بديلاً |
الأسئلة الشائعة
هل يستخدم Google دائمًا اختبار reCAPTCHA؟
تستخدم Google بشكل أساسي reCAPTCHA v2 في صفحات التحدي الخاصة بها. قد تستخدم بعض خدمات Google reCAPTCHA v3 في الخلفية. يتعامل CaptchaAI مع كلا الإصدارين.
ما هو عدد عمليات البحث التي يمكنني إجراؤها قبل الوصول إلى اختبار CAPTCHA؟
يعتمد ذلك على جودة IP الخاص بك ونمط الطلب. مع الوكلاء السكنيين والتأخيرات، يمكنك غالبًا إجراء ما بين 50 إلى 100 عملية بحث قبل التشغيل. بدون وكلاء، توقع اختبار CAPTCHA بعد 5 إلى 10 عمليات بحث.
هل يجب أن أستخدم واجهة برمجة تطبيقات Google بدلاً من ذلك؟
تتيح واجهة برمجة تطبيقات JSON للبحث المخصص من Google إمكانية إجراء 100 استعلام مجاني/day و10000 استعلام بسعر 5/1,000 دولار. إذا كان حجم ملفاتك منخفضًا وتحتاج فقط إلى نتائج البحث، فقد تكون واجهة برمجة التطبيقات الرسمية أكثر بساطة. يعد الكشط ضروريًا للبيانات التي لا تكشفها Google عبر واجهة برمجة التطبيقات.