
وحدة Python لتجاوز صفحة مكافحة البوتات الخاصة بـ Cloudflare.
تم تحسينه بواسطة Zied Boughdir
جميع الميزات تم اختبارها بمعدل نجاح 100% للوظائف الأساسية:
وحدة Python لتجاوز صفحة Cloudflare لمكافحة البوت (المعروفة أيضاً باسم "وضع أنا تحت الهجوم"، أو IUAM)، مبنية على Requests. يتضمن هذا الإصدار المحسّن دعماً لتحديات Cloudflare v2، وتدوير البروكسي، ووضع التخفي، والمزيد. تقوم Cloudflare بتغيير تقنياتها بشكل دوري، لذا سأقوم بتحديث هذا المستودع باستمرار.
يمكن أن يكون هذا مفيداً إذا كنت ترغب في تجريف أو الزحف إلى موقع محمي بواسطة Cloudflare. تتحقق صفحة Cloudflare لمكافحة البوت حالياً فقط من دعم العميل لـ Javascript، على الرغم من أنها قد تضيف تقنيات إضافية في المستقبل.
نظراً لأن Cloudflare تقوم بتغيير وتقوية صفحة الحماية الخاصة بها باستمرار، يتطلب cloudscraper محرك JavaScript / مفسراً لحل تحديات JavaScript. وهذا يسمح للبرنامج النصي بانتحال شخصية متصفح ويب عادي بسهولة دون فك تشويش وتحليل JavaScript الخاص بـ Cloudflare بشكل صريح.
للرجوع، هذه هي الرسالة الافتراضية التي تستخدمها Cloudflare لهذا النوع من الصفحات:``` Checking your browser before accessing website.com.
This process is automatic. Your browser will redirect to your requested content shortly.
Please allow up to 5 seconds...
أي برنامج نصي يستخدم cloudscraper سينتظر لمدة ~5 ثوانٍ في أول زيارة لأي موقع تم تفعيل الحماية ضد الروبوتات من Cloudflare عليه، ولن يحدث أي تأخير بعد الطلب الأول.
# التثبيت
ما عليك سوى تشغيل `pip install cloudscraper`. حزمة PyPI متاحة على https://pypi.org/project/cloudscraper/```bash
pip install cloudscraper
بدلاً من ذلك، استنسخ هذا المستودع وشغّل python setup.py install.
إذا كنت تستخدم سابقًا حزمة cloudscraper الأصلية، يمكنك الآن استخدام هذا الإصدار المحسّن مباشرةً:```python
import cloudscraper # Enhanced version
The API remains compatible, so you only need to change the import statements in your code. All function calls and parameters work the same way.
### بنية قاعدة الكود
تم تبسيط بنية قاعدة الكود لتحسين قابلية الصيانة وتقليل الالتباس:
- **وحدة واحدة**: كل الكود موجود الآن في وحدة `cloudscraper`
- **إزالة التكرار**: تمت إزالة الدلائل الزائدة
- **تحديث الاختبارات**: تم تحديث جميع ملفات الاختبار لاستخدام وحدة `cloudscraper`
هذا يجعل قاعدة الكود أنظف وأسهل في الصيانة مع ضمان التوافق العكسي مع الكود الحالي الذي يستخدم واجهة البرمجة الأصلية.
## الميزات الرئيسية في cloudscraper
| الميزة | الوصف | الحالة |
|---------|-------------|--------|
| **🆕 توافق الملفات التنفيذية** | إصلاح كامل لتحويل PyInstaller وcx_Freeze وauto-py-to-exe | ✅ **تم الإصلاح** |
| **🆕 تحديات JavaScript VM من الإصدار v3** | دعم أحدث تحديات Cloudflare القائمة على JavaScript VM | ✅ **جديد** |
| **🆕 دعم Turnstile** | دعم بديل الكابتشا الجديد من Cloudflare: Turnstile | ✅ **جديد** |
| **دعم التحديات الحديثة** | دعم محسّن لتحديات Cloudflare من الإصدارات v1 وv2 وv3 وTurnstile | ✅ مكتمل |
| **تدوير البروكسي** | تدوير بروكسي ذكي مدمج مع استراتيجيات متعددة | ✅ محسّن |
| **وضع التخفي** | محاكاة سلوك بشري لتجنب الاكتشاف | ✅ محسّن |
| **محاكاة المتصفح** | بصمة متصفح متقدمة لـ Chrome وFirefox | ✅ مستقر |
| **التعامل مع JavaScript** | مفسّر JS أفضل (js2py افتراضيًا) لحل التحديات | ✅ محسّن |
| **حلول CAPTCHA** | دعم خدمات متعددة لحل CAPTCHA | ✅ مستقر |
# التبعيات
- **Python 3.8+** (تم إسقاط الدعم لـ Python 3.6 و3.7)
- **[Requests](https://github.com/psf/requests)** >= 2.31.0
- **[requests_toolbelt](https://pypi.org/project/requests-toolbelt/)** >= 1.0.0
- **[pyparsing](https://pypi.org/project/pyparsing/)** >= 3.1.0
- **[pyOpenSSL](https://pypi.org/project/pyOpenSSL/)** >= 24.0.0
- **[pycryptodome](https://pypi.org/project/pycryptodome/)** >= 3.20.0
- **[websocket-client](https://pypi.org/project/websocket-client/)** >= 1.7.0
- **[js2py](https://pypi.org/project/Js2Py/)** >= 0.74
- **[brotli](https://pypi.org/project/Brotli/)** >= 1.1.0
- **[certifi](https://pypi.org/project/certifi/)** >= 2024.2.2
`python setup.py install` سيقوم بتثبيت التبعيات الخاصة بـ Python تلقائيًا. مفسّرات و/أو محركات جافاسكريبت التي تقرر استخدامها هي الأشياء الوحيدة التي تحتاج إلى تثبيتها بنفسك، باستثناء js2py الذي يعد جزءًا من المتطلبات كخيار افتراضي.
# مفسّرات ومحركات جافاسكريبت
نحن ندعم مفسّرات/محركات جافاسكريبت التالية.
- **[ChakraCore](https://github.com/microsoft/ChakraCore):** يمكن أيضًا العثور على الملفات الثنائية للمكتبة [هنا](https://www.github.com/VeNoMouS/cloudscraper/tree/ChakraCore/).
- **[js2py](https://github.com/PiotrDabkowski/Js2Py):** >=0.74 **(الافتراضي للإصدار المحسّن)**
- **native**: محلّل بايثون أصلي مصنوع ذاتيًا
- **[Node.js](https://nodejs.org/)**
- **[V8](https://github.com/sony/v8eval/):** نستخدم وحدة بايثون [v8eval](https://v8.dev)() الخاصة بـ Sony.
# الاستخدام
أبسط طريقة لاستخدام cloudscraper هي استدعاء `create_scraper()`.```python
import cloudscraper
scraper = cloudscraper.create_scraper() # returns a CloudScraper instance
# Or: scraper = cloudscraper.CloudScraper() # CloudScraper inherits from requests.Session
print(scraper.get("http://somesite.com").text) # => "<!DOCTYPE html><html><head>..."
هذا كل شيء...
أي طلبات تُرسل من كائن الجلسة هذا إلى مواقع محمية بواسطة Cloudflare anti-bot ستتم معالجتها تلقائيًا. المواقع التي لا تستخدم Cloudflare ستُعامل بشكل طبيعي. لا تحتاج إلى تكوين أو استدعاء أي شيء إضافي، ويمكنك عمليًا التعامل مع جميع المواقع كما لو أنها غير محمية بأي شيء.
تستخدم cloudscraper بنفس الطريقة تمامًا التي تستخدم بها Requests. يعمل cloudScraper بشكل مطابق لكائن Session الخاص بـ Requests، لكن بدلًا من استدعاء requests.get() أو requests.post()، تستدعي scraper.get() أو scraper.post().