undetected-chromedriver هي مكتبة Python تعمل على تصحيح برنامج ChromeDriver الخاص بـ Selenium لتقليل إشارات اكتشاف الروبوتات. فهو يتعامل مع مطابقة إصدار Chrome، ويزيل علامات navigator.webdriver، ويعدل بصمات المتصفح الأخرى التي تتحقق منها المواقع. عندما لا يزال الموقع يقدم اختبار CAPTCHA على الرغم من إجراءات التخفي، فإن CaptchaAI يحل المشكلة ويعيد رمزًا مميزًا تقوم بإدخاله في الصفحة.
يوضح هذا الدليل كيفية الجمع بين كلتا الأداتين - استخدم برنامج chromedriver الذي لم يتم اكتشافه للتصفح الخفي وCaptchaAI لأي اختبار CAPTCHA لا يزال يظهر.
ما تحتاجه
| المتطلبات | التفاصيل |
|---|---|
| مفتاح CaptchaAI API | captchaai.com |
| بايثون 3.8+ | |
| متصفح كروم | مثبتة على النظام الخاص بك |
تثبيت التبعيات:
pip install undetected-chromedriver requests
الإعداد الأساسي
import undetected_chromedriver as uc
import requests
import time
def create_stealth_browser():
"""Create an undetected Chrome browser instance."""
options = uc.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1920,1080")
driver = uc.Chrome(options=options)
return driver
حل reCAPTCHA v2 في جلسة التخفي
الخطوة 1: انتقل واستخرج مفتاح الموقع
API_KEY = "YOUR_API_KEY"
def extract_recaptcha_sitekey(driver):
"""Extract reCAPTCHA v2 sitekey from the page."""
try:
element = driver.find_element("css selector", "[data-sitekey]")
return element.get_attribute("data-sitekey")
except Exception:
# Try finding in iframe src
iframes = driver.find_elements("css selector", "iframe[src*='recaptcha']")
for iframe in iframes:
src = iframe.get_attribute("src")
if "k=" in src:
return src.split("k=")[1].split("&")[0]
return None
الخطوة 2: حل باستخدام CaptchaAI
def solve_recaptcha_v2(sitekey, pageurl):
"""Submit reCAPTCHA v2 to CaptchaAI and return the token."""
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
time.sleep(20)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result['request']}")
time.sleep(5)
raise TimeoutError("Solve timed out")
الخطوة 3: أدخل الرمز المميز وأرسله
def inject_recaptcha_token(driver, token):
"""Inject the solved token into the page and submit."""
driver.execute_script(f'''
document.getElementById("g-recaptcha-response").innerHTML = "{token}";
document.getElementById("g-recaptcha-response").style.display = "block";
''')
# If there's a callback function, trigger it
driver.execute_script(f'''
if (typeof ___grecaptcha_cfg !== 'undefined') {{
var clients = ___grecaptcha_cfg.clients;
for (var key in clients) {{
var client = clients[key];
if (client && client.callback) {{
client.callback("{token}");
}}
}}
}}
''')
سير العمل الكامل: قم بتسجيل الدخول باستخدام reCAPTCHA
import undetected_chromedriver as uc
import requests
import time
API_KEY = "YOUR_API_KEY"
def solve_recaptcha(sitekey, pageurl):
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": sitekey, "pageurl": pageurl, "json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
time.sleep(20)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result['request']}")
time.sleep(5)
raise TimeoutError("Solve timed out")
def main():
driver = uc.Chrome()
try:
# Navigate to target page
driver.get("https://example.com/login")
time.sleep(3)
# Fill in form fields
driver.find_element("id", "username").send_keys("user")
driver.find_element("id", "password").send_keys("pass")
# Extract sitekey
element = driver.find_element("css selector", "[data-sitekey]")
sitekey = element.get_attribute("data-sitekey")
pageurl = driver.current_url
print(f"Sitekey: {sitekey}")
# Solve CAPTCHA
token = solve_recaptcha(sitekey, pageurl)
print(f"Token: {token[:50]}...")
# Inject token
driver.execute_script(
f'document.getElementById("g-recaptcha-response").innerHTML = "{token}";'
)
# Submit form
driver.find_element("id", "submit-btn").click()
time.sleep(3)
print(f"Current URL: {driver.current_url}")
finally:
driver.quit()
if __name__ == "__main__":
main()
حل Cloudflare Turnstile
بالنسبة للمواقع التي تحتوي على عناصر واجهة المستخدم Cloudflare Turnstile، قم باستخراج مفتاح الموقع وحل المشكلة عبر طريقة Turnstile:
def solve_turnstile(sitekey, pageurl):
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "turnstile",
"sitekey": sitekey, "pageurl": pageurl, "json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
time.sleep(10)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result['request']}")
time.sleep(5)
raise TimeoutError("Solve timed out")
# Inject Turnstile token
def inject_turnstile_token(driver, token):
driver.execute_script(f'''
var input = document.querySelector('[name="cf-turnstile-response"]');
if (input) input.value = "{token}";
''')
استكشاف الأخطاء وإصلاحها
| المشكلة | السبب | الإجراء |
|---|---|---|
| إصدار Chrome غير متطابق | لا يمكن لجامعة كاليفورنيا العثور على برنامج التشغيل المطابق | قم بتحديث Chrome أو حدد version_main في uc.Chrome() |
| لا يزال اختبار CAPTCHA يظهر | يستخدم الموقع البصمات المتقدمة | هذا أمر متوقع - قم بحله باستخدام CaptchaAI |
| فشل حقن الرمز المميز | معرف العنصر أو رد الاتصال خاطئ | تحقق من تنفيذ reCAPTCHA للصفحة |
WebDriverException |
لقد تعطل كروم | إضافة --no-sandbox و--disable-dev-shm-usage |
الأسئلة الشائعة
لماذا تستخدم برنامج التشغيل الكرومي الذي لم يتم اكتشافه مع CaptchaAI؟
يعمل برنامج Chromedriver غير المكتشف على تقليل إشارات الكشف عن الروبوتات، وبالتالي يظهر عدد أقل من اختبارات CAPTCHA. عندما يستمر تشغيل اختبارات CAPTCHA، يقوم CaptchaAI بحلها. المزيج يعطي أعلى نسبة نجاح.
هل يعمل برنامج التشغيل الكرومي الذي لم يتم اكتشافه في وضع مقطوعة الرأس؟
نعم، ولكن الوضع بدون رأس قد يؤدي إلى تشغيل المزيد من اختبارات CAPTCHA. استخدم options.add_argument("--headless=new") لوضع مقطوعة الرأس الجديد في Chrome.
هل يمكنني استخدام هذا مع شبكة السيلينيوم؟
نعم، ولكن يحتاج برنامج التشغيل الكرومي الذي لم يتم اكتشافه إلى تصحيح برنامج التشغيل الثنائي المحلي. بالنسبة للإعدادات الموزعة، قم بتصحيح برنامج التشغيل مسبقًا على كل عقدة.
ماذا لو اكتشف الموقع الأتمتة على الرغم من UC؟
تستخدم بعض المواقع اكتشافًا متقدمًا يتجاوز تصحيحات UC. يعالج CaptchaAI اختبارات CAPTCHA الناتجة بغض النظر عن طريقة الكشف.
أضف CaptchaAI إلى أتمتة المتصفح الخاص بك
احصل على مفتاح API الخاص بك علىcaptchaai.com. اجمع بين التصفح الخفي وحل اختبار CAPTCHA الموثوق.