تجاوز CAPTCHA باستخدام Python
ادمج حزمة Python لحل CAPTCHA تلقائيًا على أي موقع.
حزمة Python لتكامل سهل مع API لخدمة حل CAPTCHA في 2Captcha لتجاوز reCAPTCHA وArkose captcha وGeetest وحل أي CAPTCHA أخرى
تم نشر أمثلة على GitHub لتجاوز CAPTCHA باستخدام Python وSelenium. يحتوي المستودع على سكربتات جاهزة لأتمتة عمليات حل CAPTCHA، مع تكامل سهل ضمن المشاريع الحالية.
بدء سريعالتثبيت
يمكن تثبيت حزمة السكربت عبر مدير الحزم أو يدويًا
الإعداد
وصف لجميع المعلمات اللازمة لتهيئة الحزمة المثبتة
يمكن إنشاء مثيل من فئة TwoCaptcha هكذا:
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')
يمكنك أيضًا تخصيص بعض الخيارات للمثيل الذي تم إنشاؤه:
config = {
'server': '2captcha.com',
'apiKey': 'YOUR_API_KEY',
'softId': 123,
'callback': 'https://your.site/result-receiver',
'defaultTimeout': 120,
'recaptchaTimeout': 600,
'pollingInterval': 10,
}
solver = TwoCaptcha(**config)
خيارات مثيل TwoCaptcha
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
| server | '2captcha.com' | خادم API. يمكنك تعيينه إلى 'rucaptcha.com' إذا كان حسابك مسجلًا هناك |
| softId | - | معرّف برنامجك الذي تحصل عليه بعد النشر في كتالوج برامج 2Captcha |
| callback | - | رابط خادم الويب الذي يستقبل نتيجة التعرّف على CAPTCHA. يجب تسجيل الرابط أولًا في إعدادات pingback في حسابك |
| defaultTimeout | 120 | مهلة الاستطلاع بالثواني لجميع أنواع CAPTCHA باستثناء reCAPTCHA. تحدد مدة محاولة SDK للحصول على الإجابة من نقطة نهاية API res.php |
| recaptchaTimeout | 600 | مهلة الاستطلاع لـ reCAPTCHA بالثواني. تحدد مدة محاولة SDK للحصول على الإجابة من نقطة نهاية API res.php |
| pollingInterval | 10 | الفاصل بالثواني بين الطلبات إلى نقطة نهاية API res.php، ولا يُنصح بقيم أقل من 5 ثوانٍ |
مهم: عند تعيينcallbackلمثيلTwoCaptchaستُرجع جميع الطرق فقط معرّف CAPTCHA ولن تقوم باستطلاع API للحصول على النتيجة. سيتم إرسال النتيجة إلى رابط callback. للحصول على الإجابة يدويًا استخدم طريقة getResult
حل CAPTCHA
عند إرسال أي CAPTCHA تعتمد على صورة، يمكنك توفير خيارات إضافية لمساعدة عاملي 2Captcha على حلّها بشكل صحيح
خيارات CAPTCHA
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
| numeric | 0 | يحدد ما إذا كانت CAPTCHA تحتوي أرقامًا أو رموزًا أخرى اطّلع على التفاصيل في مستندات API |
| minLength | 0 | الحد الأدنى لطول الإجابة |
| maxLength | 0 | الحد الأقصى لطول الإجابة |
| phrase | 0 | يحدد ما إذا كانت الإجابة متعددة الكلمات أم لا |
| caseSensitive | 0 | يحدد ما إذا كانت الإجابة حساسة لحالة الأحرف |
| calc | 0 | يحدد ما إذا كانت CAPTCHA تتطلب حسابًا |
| lang | - | يحدد لغة CAPTCHA، راجع قائمة اللغات المدعومة |
| hintImg | - | صورة تلميح تظهر للعاملين مع CAPTCHA |
| hintText | - | نص تلميح/مهمة يظهر للعاملين مع CAPTCHA |
لتجاوز CAPTCHA العادية (نص مشوّه داخل صورة) استخدم الطريقة التالية. يمكن أيضًا استخدام هذه الطريقة للتعرّف على أي نص داخل الصورة.
result = solver.normal('path/to/captcha.jpg', param1=..., ...)يمكن استخدام هذه الطريقة لتجاوز CAPTCHA تتطلب الإجابة عن سؤال مقدّم كنص واضح.
result = solver.text('If tomorrow is Saturday, what day is today?', param1=..., ...)استخدم هذه الطريقة لحل reCAPTCHA V2 والحصول على token لتجاوز الحماية.
result = solver.recaptcha(sitekey='6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
url='https://mysite.com/page/with/recaptcha',
param1=..., ...)
توفر هذه الطريقة حلّال reCAPTCHA V3 وتُرجع token.
result = solver.recaptcha(sitekey='6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
url='https://mysite.com/page/with/recaptcha',
version='v3',
param1=..., ...)
طريقة حل FunCaptcha (Arkoselabs). تُرجع token.
result = solver.funcaptcha(sitekey='6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
url='https://mysite.com/page/with/funcaptcha',
param1=..., ...)
طريقة لحل GeeTest puzzle captcha. تُرجع مجموعة tokens بصيغة JSON.
result = solver.geetest(gt='f1ab2cdefa3456789012345b6c78d90e',
challenge='12345678abc90123d45678ef90123a456b',
url='https://www.site.com/page/',
param1=..., ...)
طريقة معتمدة على token لتجاوز Capy puzzle captcha.
result = solver.capy(sitekey='PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v',
url='http://mysite.com/',
api_server='https://jp.api.capy.me/',
param1=..., ...)
طريقة Grid تُعرف أصلًا بطريقة reCAPTCHA V2 القديمة. يمكن استخدامها لتجاوز أي CAPTCHA يمكن تطبيق شبكة عليها وتحتاج للنقر على مربعات محددة. تُرجع أرقام المربعات.
result = solver.grid('path/to/captcha.jpg', param1=..., ...)يمكن استخدام طريقة Canvas عندما تحتاج لرسم خط حول كائن في الصورة. تُرجع مجموعة إحداثيات نقاط لرسم مضلع.
result = solver.canvas('path/to/captcha.jpg', param1=..., ...)ترجع طريقة ClickCaptcha إحداثيات نقاط على صورة CAPTCHA. يمكن استخدامها إذا كنت بحاجة للنقر على نقاط محددة في الصورة.
result = solver.coordinates('path/to/captcha.jpg', param1=..., ...)يمكن استخدام هذه الطريقة لحل CAPTCHA تطلب تدوير كائن. تُستخدم غالبًا لتجاوز FunCaptcha. تُرجع زاوية التدوير.
result = solver.rotate('path/to/captcha.jpg', param1=..., ...)طرق أخرى
طرق إضافية صالحة تُستخدم أثناء عمل السكربتات الرئيسية
send / getResult
يمكن استخدام هذه الطرق لإرسال CAPTCHA يدويًا واستطلاع الإجابة.
import time
. . . . .
id = solver.send(file='path/to/captcha.jpg')
time.sleep(20)
code = solver.get_result(id)
balance
استخدم هذه الطريقة للحصول على رصيد حسابك.
balance = solver.balance()report
استخدم هذه الطريقة ل لإبلاغ عن إجابة CAPTCHA جيدة أو سيئة.
solver.report(id, True) # captcha solved correctly
solver.report(id, False) # captcha solved incorrectly
معالجة الأخطاء
احتمالات الأخطاء القياسية التي يعيدها النظام عند معالجة الطلبات
في حال حدوث خطأ، يرمي حلّال CAPTCHA استثناءً. من المهم التعامل مع هذه الحالات بشكل صحيح. نوصي باستخدام try/except لمعالجة الاستثناءات.
Try:
result = solver.text('If tomorrow is Saturday, what day is today?')
Except ValidationException as e:
# invalid parameters passed
print(e)
Except NetworkException as e:
# network error occurred
print(e)
Except ApiException as e:
# api respond with error
print(e)
Except TimeoutException as e:
# captcha is not solved so far
print(e)Proxies
يمكنك تمرير proxy كوسيط إضافي لطرق: recaptcha وfuncaptcha وgeetest. سيتم تمرير الـ proxy إلى API لحل CAPTCHA.
proxy={
'type': 'HTTPS',
'uri': 'login:password@IP_address:PORT'
}استدعاءات Async
يمكنك أيضًا إجراء استدعاءات غير متزامنة باستخدام asyncio، مثلًا:
import asyncio
import concurrent.futures
from twocaptcha import TwoCaptcha
captcha_result = await captchaSolver(image)
async def captchaSolver(image):
loop = asyncio.get_running_loop()
with concurrent.future.ThreadPoolExecutor() as pool:
result = await loop.run_in_executor(pool, lambda: TwoCaptcha(API_KEY).normal(image))
return result