
وحدة 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().
راجع توثيق Requests لمزيد من المعلومات.
مشكلة user agent عند تحويل تطبيقات Python التي تستخدم cloudscraper إلى ملفات تنفيذية تم إصلاحها تمامًا!
عند تحويل تطبيقات Python إلى ملفات تنفيذية (باستخدام PyInstaller أو cx_Freeze أو auto-py-to-exe وما إلى ذلك)، كان المستخدمون يواجهون أخطاءً متعلقة بوظيفة user agent أو agent_user لأن ملف browsers.json لم يكن مضمنًا بشكل صحيح.
يتضمن cloudscraper v2.7.0 نظامًا احتياطيًا تلقائيًا:
الخيار 1: فقط قم ببناء ملفك التنفيذي (يعمل تلقائيًا):```bash pyinstaller your_app.py
**الخيار 2: تضمين قاعدة بيانات وكيل المستخدم الكاملة** (موصى به)```bash
pyinstaller --add-data "cloudscraper/user_agent/browsers.json;cloudscraper/user_agent/" your_app.py
تم اختبار توافق جميع الملفات القابلة للتنفيذ بشكل شامل:``` ✅ Normal operation with browsers.json ✅ Fallback operation without browsers.json ✅ PyInstaller environment simulation ✅ All browser/platform combinations ✅ HTTP requests with fallback user agents
تطبيقات cloudscraper الخاصة بك ستعمل الآن بشكل مثالي عند تحويلها إلى ملفات تنفيذية! 🎉
## 🆕 دعم تحديات Cloudflare v3 JavaScript VM
### ما هي تحديات v3؟
تمثل تحديات Cloudflare v3 أحدث تطور في تقنية الحماية من البوتات. على عكس تحديات v1 و v2 التقليدية، فإن تحديات v3:
- **تعمل في آلة افتراضية لجافا سكريبت**: يتم تنفيذ التحديات في بيئة جافا سكريبت معزولة
- **تستخدم اكتشافًا متقدمًا**: خوارزميات أكثر تطورًا لاكتشاف السلوك الآلي
- **تولّد كودًا ديناميكيًا**: يتم إنشاء كود التحدي ديناميكيًا ويصعب هندسته عكسيًا
- **توفر حماية حديثة**: أحدث تقنية لمكافحة البوتات من Cloudflare
### الاستخدام الأساسي لـ v3```python
import cloudscraper
# v3 support is enabled by default
scraper = cloudscraper.create_scraper()
response = scraper.get("https://example.com")
print(response.text)
import cloudscraper
scraper = cloudscraper.create_scraper( interpreter='js2py', # Recommended for v3 challenges delay=5, # Allow more time for complex challenges debug=True # Enable debug output to see v3 detection )
response = scraper.get("https://example.com") print(response.text)
### v3 مع مفسرات جافاسكربت مختلفة
تعمل جميع مفسرات جافاسكربت مع تحديات v3:```python
# Test different interpreters for v3 challenges
interpreters = ['js2py', 'nodejs', 'native']
for interpreter in interpreters:
try:
scraper = cloudscraper.create_scraper(interpreter=interpreter)
response = scraper.get("https://example.com")
print(f"✅ {interpreter}: Success ({response.status_code})")
except Exception as e:
print(f"❌ {interpreter}: Failed - {str(e)}")
عند تمكين وضع التصحيح، سترى كشف التحدي v3 قيد التنفيذ:```python scraper = cloudscraper.create_scraper(debug=True) response = scraper.get("https://example.com")
### اعتبارات الأداء لـ v3
تحديات v3 أكثر تعقيدًا وقد تتطلب وقتًا إضافيًا:```python
# Recommended settings for v3 challenges
scraper = cloudscraper.create_scraper(
delay=5, # Longer delay for complex challenges
interpreter='js2py', # Most compatible interpreter
enable_stealth=True # Additional stealth for v3 detection
)
import cloudscraper
scraper = cloudscraper.create_scraper()
response = scraper.get("https://example.com") print(f"Status: {response.status_code}") print(f"Content length: {len(response.text)}")
### مثال 2: الإعداد المتقدم لتحقيق أقصى توافق```python
import cloudscraper
# Advanced configuration for challenging websites
scraper = cloudscraper.create_scraper(
# Challenge handling
interpreter='js2py', # Best compatibility for v3 challenges
delay=5, # Extra time for complex challenges
# Stealth mode
enable_stealth=True,
stealth_options={
'min_delay': 2.0,
'max_delay': 6.0,
'human_like_delays': True,
'randomize_headers': True,
'browser_quirks': True
},
# Browser emulation
browser='chrome',
# Debug mode
debug=True
)
response = scraper.get("https://example.com")
import cloudscraper
scraper = cloudscraper.create_scraper( captcha={ 'provider': '2captcha', 'api_key': 'your_2captcha_api_key' }, debug=True # See when Turnstile is detected and solved )
response = scraper.get("https://turnstile-protected-site.com") print(f"Successfully bypassed Turnstile: {response.status_code}")
### مثال 4: تناوب البروكسي مع دعم v3```python
import cloudscraper
proxies = [
'http://user:[email protected]:8080',
'http://user:[email protected]:8080',
'http://user:[email protected]:8080'
]
scraper = cloudscraper.create_scraper(
# Proxy rotation
rotating_proxies=proxies,
proxy_options={
'rotation_strategy': 'smart',
'ban_time': 300
},
# v3 challenge support
interpreter='js2py',
delay=5,
# Stealth mode
enable_stealth=True
)
# Each request may use a different proxy
for i in range(5):
response = scraper.get("https://example.com")
print(f"Request {i+1}: {response.status_code}")
import cloudscraper
def test_challenge_handling(): """Test different challenge types with comprehensive configuration"""
scraper = cloudscraper.create_scraper(
interpreter='js2py',
delay=5,
debug=True,
enable_stealth=True
)
test_urls = [
"https://example1.com", # Might have v1 challenges
"https://example2.com", # Might have v2 challenges
"https://example3.com", # Might have v3 challenges
"https://example4.com", # Might have Turnstile
]
for url in test_urls:
try:
response = scraper.get(url)
print(f"✅ {url}: Success ({response.status_code})")
except Exception as e:
print(f"❌ {url}: Failed - {str(e)}")
test_challenge_handling()
## 🧪 الاختبار والتحقق
### مجموعة اختبارات شاملة
يتضمن cloudscraper نصوص اختبار شاملة للتحقق من أن جميع الميزات تعمل بشكل صحيح:```bash
# Test all features
python test_all_features.py --debug
# Test specifically v3 challenges
python test_v3_challenges.py --debug
# Test with specific interpreter
python test_v3_challenges.py --interpreter nodejs
تم اختبار المكتبة بدقة مع معدل نجاح 100% للوظائف الأساسية:
*يتطلب إعدادات خارجية (بروكسيات/مفاتيح API)
يمكنك اختبار المكتبة يدويًا باستخدام وضع التصحيح لرؤية اكتشاف التحديات أثناء العمل:```python import cloudscraper
scraper = cloudscraper.create_scraper(debug=True) response = scraper.get("https://example.com")
### استكشاف الأخطاء وإصلاحها
إذا واجهت مشكلات:
1. **فعّل وضع التصحيح** لعرض معلومات مفصلة
2. **جرّب مفسّرات مختلفة** (js2py, nodejs, native)
3. **زد فترة التأخير** للتحديات المعقدة
4. **فعّل وضع التخفي** لحماية إضافية
5. **تحقق من إعدادات البروكسي** إذا كنت تستخدم بروكسيات```python
# Troubleshooting configuration
scraper = cloudscraper.create_scraper(
debug=True, # See what's happening
interpreter='js2py', # Most compatible
delay=10, # Extra time
enable_stealth=True # Additional protection
)
إذا كنت لا تريد حتى محاولة حل Cloudflare v1 (مهمل)..
| Parameter | Value | Default |
|---|---|---|
| disableCloudflareV1 | (boolean) | False |
scraper = cloudscraper.create_scraper(disableCloudflareV1=True)
### تعطيل Cloudflare V2
#### الوصف
إذا كنت لا تريد حتى محاولة حل Cloudflare v2..
#### المعلمات
|Parameter|Value|Default|
|-------------|:-------------:|:-----:|
|disableCloudflareV2|(boolean)|False|
#### مثال```python
scraper = cloudscraper.create_scraper(disableCloudflareV2=True)
إذا كنت لا تريد حتى محاولة حل JavaScript VM من Cloudflare v3..
| المعلمة | القيمة | الافتراضي |
|---|---|---|
| disableCloudflareV3 | (boolean) | False |
scraper = cloudscraper.create_scraper(disableCloudflareV3=True)
### تعطيل Turnstile
#### الوصف
إذا كنت لا تريد حتى محاولة حل Cloudflare Turnstile..
#### المعلمات
|المعلمة|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|disableTurnstile|(boolean)|False|
#### مثال```python
scraper = cloudscraper.create_scraper(disableTurnstile=True)
قم بالتدوير تلقائيًا عبر قائمة من البروكسيات لتجنب الحظر المستند إلى عنوان IP.
| المعامل | القيمة | الافتراضي |
|---|---|---|
| rotating_proxies | (list أو dict) | None |
| proxy_options | (dict) | {} |
proxy_options| المعامل | القيمة | الافتراضي |
|---|---|---|
| rotation_strategy | (string) sequential, random, أو |
proxies = [ 'http://user:[email protected]:8080', 'http://user:[email protected]:8080', 'http://user:[email protected]:8080' ]
scraper = cloudscraper.create_scraper( rotating_proxies=proxies, proxy_options={ 'rotation_strategy': 'smart', 'ban_time': 300 } )
### وضع التخفي
#### الوصف
تمكين تقنيات التخفي لمحاكاة السلوك البشري بشكل أفضل وتجنب الاكتشاف.
#### المعلمات
|المعلمة|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|enable_stealth|(boolean)|True|
|stealth_options|(dict)|{}|
#### معلمات `stealth_options`
|المعلمة|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|min_delay|(float) الحد الأدنى للتأخير بين الطلبات|1.0|
|max_delay|(float) الحد الأقصى للتأخير بين الطلبات|5.0|
|human_like_delays|(boolean) إضافة تأخيرات عشوائية بين الطلبات|True|
|randomize_headers|(boolean) توزيع الرؤوس بشكل عشوائي لتجنب البصمة الرقمية|True|
|browser_quirks|(boolean) تطبيق خصائص المتصفح الفريدة|True|
#### مثال```python
scraper = cloudscraper.create_scraper(
enable_stealth=True,
stealth_options={
'min_delay': 2.0,
'max_delay': 6.0,
'human_like_delays': True,
'randomize_headers': True,
'browser_quirks': True
}
)
تمت إضافة دعم فك ضغط Brotli، وهو مفعّل افتراضيًا.
| المعامل | القيمة | الافتراضي |
|---|---|---|
| allow_brotli | (boolean) | True |
scraper = cloudscraper.create_scraper(allow_brotli=False)
### تصفية المتصفح / وكيل المستخدم
#### الوصف
التحكم في كيفية وأي وكيل مستخدم يتم اختياره "عشوائيًا".
#### المعلمات
يمكن تمريرها كوسيطة إلى `create_scraper()` أو `get_tokens()` أو `get_cookie_string()`.
|المعلمة|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|browser|(string) `chrome` أو `firefox`|None|
أو
|المعلمة|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|browser|(dict)||
##### `browser` *_dict_* المعلمات
|المعلمة|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|browser|(string) `chrome` أو `firefox`|None|
|mobile|(boolean)|True|
|desktop|(boolean)|True|
|platform|(string) `'linux', 'windows', 'darwin', 'android', 'ios'`|None|
|custom|(string)|None|
#### مثال```python
scraper = cloudscraper.create_scraper(browser='chrome')
أو```python
scraper = cloudscraper.create_scraper( browser={ 'browser': 'chrome', 'platform': 'android', 'desktop': False } )
scraper = cloudscraper.create_scraper( browser={ 'browser': 'firefox', 'platform': 'windows', 'mobile': False } )
scraper = cloudscraper.create_scraper( browser={ 'custom': 'ScraperBot/1.0', } )
### التصحيح
#### الوصف
يطبع معلومات ترويسة الطلب ومحتواه لغرض التصحيح.
#### المعلمات
يمكن تعيينه كخاصية عبر كائن `cloudscraper` الخاص بك أو تمريره كوسيط إلى `create_scraper()`، `get_tokens()`، `get_cookie_string()`.
|المعلمة|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|debug|(boolean)|False|
#### مثال```python
scraper = cloudscraper.create_scraper(debug=True)
يتطلب تحدّي Cloudflare IUAM من المتصفح الانتظار حوالي 5 ثوانٍ قبل إرسال إجابة التحدي، إذا كنت ترغب في تجاوز هذا التأخير.
يمكن تعيينه كخاصية عبر كائن cloudscraper الخاص بك أو تمريره كوسيط إلى create_scraper()، get_tokens()، get_cookie_string().
| المعامل | القيمة | الافتراضي |
|---|---|---|
| delay | (float) | مستخرج من صفحة IUAM |
scraper = cloudscraper.create_scraper(delay=10)
### الجلسة الحالية
#### الوصف:
إذا كان لديك بالفعل جلسة Requests حالية، يمكنك تمريرها إلى الدالة `create_scraper()` لمواصلة استخدام تلك الجلسة.
#### المعلمات
|المعلمة|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|sess|(requests.session)|None|
#### مثال```python
session = requests.session()
scraper = cloudscraper.create_scraper(sess=session)
لسوء الحظ، ليست كل سمات جلسة Requests قابلة للنقل بسهولة، لذا إذا واجهت مشاكل مع هذا،
يجب عليك استبدال استدعاء تهيئة الجلسة الأولي
من:```python sess = requests.session()
إلى:```python
sess = cloudscraper.create_scraper()
يدعم cloudscraper حاليًا محركات/مفسرات JavaScript التالية
يمكن تعيينها كخاصية عبر كائن cloudscraper الخاص بك أو تمريرها كوسيط إلى create_scraper()، get_tokens()، get_cookie_string().
| المعلمة | القيمة | الافتراضي |
|---|---|---|
| interpreter | (string) | js2py |
scraper = cloudscraper.create_scraper(interpreter='nodejs')
#### ملاحظة
النسخة المحسّنة تستخدم `js2py` كمفسّر افتراضي لأنها توفر توافقًا أفضل مع تحديات Cloudflare الحديثة. إذا واجهت مشكلات، يمكنك تجربة مفسّرات أخرى.
------
### حلول كابتشا من جهات خارجية
#### الوصف
يدعم `cloudscraper` حاليًا حلول كابتشا التالية من جهات خارجية، إذا كنت بحاجة إليها.
- **[2captcha](https://www.2captcha.com/)**
- **[anticaptcha](https://www.anti-captcha.com/)**
- **[CapSolver](https://capsolver.com/)**
- **[CapMonster Cloud](https://capmonster.cloud/)**
- **[deathbycaptcha](https://www.deathbycaptcha.com/)**
- **[9kw](https://www.9kw.eu/)**
- **__return_response__**
#### ملاحظة
أعمل على إضافة المزيد من الحلول من جهات خارجية. إذا كنت ترغب في إضافة خدمة غير مدعومة حاليًا، يرجى فتح تذكرة دعم على GitHub.
##### المعلمات المطلوبة
يمكن تعيينها كخاصية عبر كائن `cloudscraper` الخاص بك أو تمريرها كوسيط إلى `create_scraper()` أو `get_tokens()` أو `get_cookie_string()`.
|المعامل|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|captcha|(dict)|None|
#### دعم Turnstile
Cloudflare Turnstile هو بديل جديد لكابتشا يحل محل أنظمة الكابتشا التقليدية بنظام تحقق أكثر سهولة للمستخدم. يدعم cloudscraper الآن حل تحديات Turnstile باستخدام موفري الكابتشا الذين تعرفهم بالفعل.
##### مثال```python
# Using 2captcha to solve Turnstile challenges
scraper = cloudscraper.create_scraper(
captcha={
'provider': '2captcha',
'api_key': 'your_2captcha_api_key'
}
)
# The Turnstile challenge will be automatically detected and solved
response = scraper.get('https://example.com')
captcha المطلوبةإذا تم تعيين البروكسيات، يمكنك تعطيل إرسال البروكسيات إلى 2captcha عن طريق ضبط no_proxy إلى True
scraper = cloudscraper.create_scraper( captcha={ 'provider': '2captcha', 'api_key': 'your_2captcha_api_key' } )
#### anticaptcha
##### معلمات `captcha` المطلوبة
|المعلمة|القيمة|مطلوب|الافتراضي|
|-------------|:-------------:|:-----:|:-----:|
|provider|(string) `anticaptcha`|نعم||
|api_key|(string)|نعم||
|no_proxy|(boolean)|لا|False|
##### ملاحظة
إذا تم تعيين البروكسيات، يمكنك تعطيل إرسال البروكسيات إلى anticaptcha عن طريق ضبط `no_proxy` إلى `True`
##### مثال```python
scraper = cloudscraper.create_scraper(
captcha={
'provider': 'anticaptcha',
'api_key': 'your_anticaptcha_api_key'
}
)
captcha المطلوبة| المعامل | القيمة | مطلوب | الافتراضي |
|---|---|---|---|
| provider | (string) captchaai | نعم | |
| api_key | (string) | نعم |
scraper = cloudscraper.create_scraper( captcha={ 'provider': 'capsolver', 'api_key': 'your_captchaai_api_key' } )
#### CapMonster Cloud
##### معلمات `captcha` المطلوبة
|المعلمة|القيمة|مطلوب|الافتراضي|
|-------------|:-------------:|:-----:|:-----:|
|provider|(string) `capmonster`| نعم||
|clientKey|(string)| نعم||
|no_proxy|(boolean)|لا|False|
##### ملاحظة
إذا تم ضبط البروكسيات، يمكنك تعطيل إرسالها إلى CapMonster عن طريق تعيين `no_proxy` إلى `True`
##### مثال```python
scraper = cloudscraper.create_scraper(
captcha={
'provider': 'capmonster',
'clientKey': 'your_capmonster_clientKey'
}
)
captcha------```python scraper = cloudscraper.create_scraper( captcha={ 'provider': 'deathbycaptcha', 'username': 'your_deathbycaptcha_username', 'password': 'your_deathbycaptcha_password', } )
#### 9kw
##### معلمات `captcha` المطلوبة
|المعلمة|القيمة|مطلوب|الافتراضي|
|-------------|:-------------:|:-----:|:-----:|
|provider|(string) `9kw`|نعم||
|api_key|(string)|نعم||
|maxtimeout|(int)|لا|180|
##### مثال```python
scraper = cloudscraper.create_scraper(
captcha={
'provider': '9kw',
'api_key': 'your_9kw_api_key',
'maxtimeout': 300
}
)
استخدم هذا إذا كنت تريد الحصول على حمولة استجابة الطلبات دون حل اختبار الكابتشا.
captcha المطلوبة| المعامل | القيمة | مطلوب | الافتراضي |
|---|---|---|---|
| provider | (string) return_response | نعم |
scraper = cloudscraper.create_scraper( captcha={'provider': 'return_response'} )
## التكامل
من السهل دمج `cloudscraper` مع التطبيقات والأدوات الأخرى. تستخدم Cloudflare ملفي تعريف ارتباط (cookies) كرموز: أحدهما للتحقق من أنك تجاوزت صفحة التحدي، والآخر لتتبع جلستك. لتجاوز صفحة التحدي، ما عليك سوى تضمين ملفي تعريف الارتباط هذين (مع user-agent المناسب) في جميع طلبات HTTP التي ترسلها.
لاسترجاع ملفات تعريف الارتباط فقط (كقاموس)، استخدم `cloudscraper.get_tokens()`. ولاسترجاعها كترويسة HTTP كاملة باسم `Cookie`، استخدم `cloudscraper.get_cookie_string()`.
تقبل كل من `get_tokens` و`get_cookie_string` وسائط Requests المعتادة ذات الكلمات المفتاحية (مثل `get_tokens(url, proxies={"http": "socks5://localhost:9050"})`).
يُرجى قراءة [توثيق Requests حول وسائط الطلبات](http://docs.python-requests.org/en/master/api/#requests.Session.request) لمزيد من المعلومات.
------
### التعامل مع User-Agent
تُرجع الدالتان الخاصتان بالتكامل مجموعة (tuple) بصيغة `(cookie, user_agent_string)`.
**يجب عليك استخدام نفس سلسلة user-agent عند الحصول على الرموز وعند إجراء الطلبات باستخدام تلك الرموز، وإلا فسيميزك Cloudflare كروبوت.**
وهذا يعني أنه يتعين عليك تمرير `user_agent_string` المُرجَعة إلى أي برنامج نصي أو أداة أو خدمة تمرر إليها الرموز (مثل curl أو أداة تجريد متخصصة)، ويجب أن تستخدم user-agent المُمرر عند إجراء طلبات HTTP.
------
### أمثلة على التكامل
تذكر أنه يجب عليك دائمًا استخدام نفس user-agent عند استرجاع ملفات تعريف الارتباط هذه أو استخدامها. تُرجع هذه الدوال جميعًا مجموعة `(cookie_dict, user_agent_string)`.
------
#### استرجاع قاموس ملفات تعريف الارتباط عبر وكيل (proxy)
`get_tokens` هي دالة مساعدة لإرجاع قاموس Python يحتوي على ملفات تعريف ارتباط جلسة Cloudflare. للتوضيح، سنقوم بتكوين هذا الطلب لاستخدام وكيل. (يُرجى ملاحظة أنه إذا طلبت رموز تجاوز Cloudflare عبر وكيل، فيجب عليك دائمًا استخدام نفس الوكيل عند تمرير تلك الرموز إلى الخادم. تتطلب Cloudflare أن تظل IP التي تحل التحدي وIP الزائر كما هي.)
إذا كنت لا ترغب في استخدام وكيل، فما عليك سوى عدم تمرير وسيطة الكلمة المفتاحية `proxies`. هذه الدوال المساعدة تدعم جميع وسائط Requests المعتادة ذات الكلمات المفتاحية، مثل `params` و`data` و`headers`.```python
import cloudscraper
# Using a single proxy
proxies = {"http": "http://localhost:8080", "https": "http://localhost:8080"}
tokens, user_agent = cloudscraper.get_tokens("http://somesite.com", proxies=proxies)
print(tokens)
# => {
'cf_clearance': 'c8f913c707b818b47aa328d81cab57c349b1eee5-1426733163-3600',
'__cfduid': 'dd8ec03dfdbcb8c2ea63e920f1335c1001426733158',
'cf_chl_2': 'some_value',
'cf_chl_prog': 'some_value'
}
# Using proxy rotation
rotating_proxies = [
'http://user:[email protected]:8080',
'http://user:[email protected]:8080',
'http://user:[email protected]:8080'
]
tokens, user_agent = cloudscraper.get_tokens(
"http://somesite.com",
rotating_proxies=rotating_proxies,
proxy_options={
'rotation_strategy': 'smart',
'ban_time': 300
},
enable_stealth=True,
stealth_options={
'min_delay': 2.0,
'max_delay': 6.0
}
)
get_cookie_string هي دالة مساعدة لإرجاع الرموز المميزة كسلسلة نصية لاستخدامها كقيمة لترويسة Cookie في HTTP.
هذا مفيد عند إنشاء طلب HTTP يدويًا، أو عند العمل مع تطبيق خارجي أو مكتبة تمرر ترويسات الكوكيز الخام.```python import cloudscraper
cookie_value, user_agent = cloudscraper.get_cookie_string('http://somesite.com')
print('GET / HTTP/1.1\nCookie: {}\nUser-Agent: {}\n'.format(cookie_value, user_agent))
#### مثال على curl
إليك مثال على دمج cloudscraper مع curl. كما ترى، كل ما عليك فعله هو تمرير الكوكيز وuser-agent إلى curl.```python
import subprocess
import cloudscraper
# With get_tokens() cookie dict:
# tokens, user_agent = cloudscraper.get_tokens("http://somesite.com")
# cookie_arg = 'cf_clearance={}; __cfduid={}'.format(tokens['cf_clearance'], tokens['__cfduid'])
# With get_cookie_string() cookie header; recommended for curl and similar external applications:
cookie_arg, user_agent = cloudscraper.get_cookie_string('http://somesite.com')
# With a custom user-agent string you can optionally provide:
# ua = "Scraping Bot"
# cookie_arg, user_agent = cloudscraper.get_cookie_string("http://somesite.com", user_agent=ua)
result = subprocess.check_output(
[
'curl',
'--cookie',
cookie_arg,
'-A',
user_agent,
'http://somesite.com'
]
)
نسخة مختصرة. تطبع محتويات صفحة أي موقع محمي بواسطة Cloudflare، عبر curl.
تحذير: قد يكون استخدام shell=True مع subprocess خطيرًا في التعليمات البرمجية الحقيقية.```python
url = "http://somesite.com"
cookie_arg, user_agent = cloudscraper.get_cookie_string(url)
cmd = "curl --cookie {cookie_arg} -A {user_agent} {url}"
print(
subprocess.check_output(
cmd.format(
cookie_arg=cookie_arg,
user_agent=user_agent,
url=url
),
shell=True
)
)
### التشفير
#### الوصف
التحكم في التواصل بين العميل والخادم
#### المعلمات
يمكن تمريرها كوسيطة إلى `create_scraper()`.
|المعلمة|القيمة|الافتراضي|
|-------------|:-------------:|:-----:|
|cipherSuite|(string)|None|
|ecdhCurve|(string)|prime256v1|
|server_hostname|(string)|None|
#### مثال```python
# Some servers require the use of a more complex ecdh curve than the default "prime256v1"
# It may can solve handshake failure
scraper = cloudscraper.create_scraper(ecdhCurve='secp384r1')
لم يتم توفير أي محتوى للترجمة في الرسالة. يرجى إرسال النص المطلوب ترجمته.```python
scraper = cloudscraper.create_scraper(server_hostname='www.somesite.com') scraper.get( 'https://backend.hosting.com/', headers={'Host': 'www.somesite.com'} )
# الميزات المحسّنة
توفر هذه النسخة المحسّنة من cloudscraper قدرات أفضل لتجاوز آليات حماية Cloudflare الحديثة:
1. **دعم تحديات Cloudflare v2** - معالجة أفضل للتحديات الحديثة
2. **تدوير البروكسي** - تدوير ذكي مع استراتيجيات متعددة
3. **وضع التخفي** - محاكاة سلوك بشري
4. **تحسين معالجة JavaScript** - مترجم JS أفضل (js2py افتراضيًا)
5. **إدارة محسّنة لملفات تعريف الارتباط** - دعم لأنواع ملفات تعريف الارتباط الحديثة في Cloudflare
## التحديثات الأخيرة
- **تنظيف قاعدة الكود**: إزالة الكود المكرر وتوحيده في وحدة واحدة
- **تحديثات مجموعة الاختبارات**: جميع الاختبارات تستخدم الآن وحدة cloudscraper
- **التوثيق**: تحسين README مع أمثلة أوضح وتعليمات استخدام
## مثال باستخدام جميع الميزات المحسّنة```python
import cloudscraper
# Create a scraper with all enhanced features
scraper = cloudscraper.create_scraper(
# Use js2py interpreter for better compatibility
interpreter='js2py',
# Enable proxy rotation
rotating_proxies=[
'http://user:[email protected]:8080',
'http://user:[email protected]:8080',
'http://user:[email protected]:8080'
],
proxy_options={
'rotation_strategy': 'smart',
'ban_time': 300
},
# Enable stealth mode
enable_stealth=True,
stealth_options={
'min_delay': 2.0,
'max_delay': 6.0,
'human_like_delays': True,
'randomize_headers': True,
'browser_quirks': True
},
# Set browser fingerprint
browser={
'browser': 'chrome',
'platform': 'windows',
'mobile': False
},
# Enable debugging if needed
debug=False
)
# Make a request to a Cloudflare-protected site
response = scraper.get('https://example.com')
print(response.text)
دعم تحدّي JavaScript VM من Cloudflare الإصدار v3
دعم محسّن لـ Turnstile
تحسينات مفسّر جافا سكريبت
اكتشاف التحديات
خيارات الإعداد
disableCloudflareV3 للتحكم الانتقائي في التحدياتمجموعة اختبارات شاملة
التوثيق
تتضمن المكتبة سكربتات اختبار شاملة للتحقق من الوظائف:
اختبار سريع للتحقق من أن المكتبة تعمل:```python import cloudscraper
scraper = cloudscraper.create_scraper(browser='chrome')
response = scraper.get('https://example.com') print(f"Status code: {response.status_code}")
### تشغيل مجموعة الاختبارات
تتضمن المكتبة عدة نصوص برمجية للاختبار:```bash
# Run the comprehensive test suite
python test_cloudscraper_comprehensive.py https://example-cloudflare-site.com
# Test with a specific Cloudflare-protected site
python test_cloudflare_site.py https://example-cloudflare-site.com --browser firefox --stealth
إذا واجهت مشكلات:
للمشكلات أو الأسئلة، يرجى فتح issue على مستودع GitHub.```bash pip install --upgrade cloudscraper # Always use the latest version
| الميزة | تغطية الاختبار | معدل النجاح |
|---|
| الطلبات الأساسية | ✅ مكتمل | 100% |
| التعامل مع User Agent | ✅ مكتمل | 100% |
| تحديات Cloudflare v1 | ✅ مكتمل | 100% |
| تحديات Cloudflare v2 | ✅ مكتمل | 100% |
| تحديات Cloudflare v3 | ✅ جديد | 100% |
| وضع التخفي | ✅ مكتمل | 100% |
| مفسرات JavaScript | ✅ جميعها مدعومة | 100% |
| تدوير البروكسي | ✅ مكتمل | N/A* |
| دعم Turnstile | ✅ مكتمل | N/A* |
smartsequential |
| ban_time | (int) ثوانٍ لحظر البروكسي بعد الفشل | 300 |
| المعلمة | القيمة | مطلوب | الافتراضي |
|---|
| provider | (string) 2captcha | نعم | |
| api_key | (string) | نعم | |
| no_proxy | (boolean) | لا | False |
| المعامل | القيمة | مطلوب | افتراضي |
|---|
| provider | (string) deathbycaptcha | نعم | |
| username | (string) | نعم | |
| password | (string) | نعم |