
Selenium Chromedriver مخصص | صفر إعدادات | يتجاوز جميع أنظمة مكافحة البوتات (مثل Distil / Imperva / Datadadome / CloudFlare IUAM)
https://github.com/ultrafunkamsterdam/undetected-chromedriver
تصحيح مُحسَّن لـ Selenium Chromedriver لا يُفعِّل خدمات مكافحة البوتات مثل Distill Network / Imperva / DataDome / Botprotect.io يقوم تلقائيًا بتنزيل الملف الثنائي للسائق وتصحيحه.
pip install undetected-chromedriver
أو ، إذا كنت تشعر بالمغامرة، ثبّت مباشرة عبر github```
pip install git+https://www.github.com/ultrafunkamsterdam/undetected-chromedriver@master # replace @master with @branchname for other branches
سأضع حدودًا لمتتبع المشكلات (issue tracker). لقد أُسيء استخدامه لفترة طويلة جدًا.
أي أخبار جيدة؟
نعم، لقد فتحت Undetected-Discussions والذي أعتقد أنه سيساعدنا بشكل أفضل على المدى الطويل.
هذه الحزمة لا تخفي عنوان IP الخاص بك، وأكرر أنها لا تخفيه، لذا عند التشغيل من مركز بيانات (حتى من المراكز الصغيرة)، فإن الاحتمالات كبيرة بأنك لن تنجح! أيضًا، إذا كانت سمعة عنوان IP لديك في المنزل منخفضة، فلن تنجح!
تشغيل الكود التالي من المنزل، ومن مركز بيانات.```python import undetected_chromedriver as uc driver = uc.Chrome(headless=True,use_subprocess=False) driver.get('https://nowsecure.nl') driver.save_screenshot('nowsecure.png')
<div style="display:flex;flex-direction:row">
<img src="https://assets.kitploit.com/production/public/readmes/50956/c1bde1e3621f106c2504cf4ecb9cc9015b23340c7a9bd5f20364c27016b2dd40/4f02747809c3b183c8af8238f6858540057402adfe0f26d4fa9d646091fa5781-display-v1.webp" width="720"/>
<img src="https://assets.kitploit.com/production/public/readmes/50956/ac44f4c3d408a07f4a0b96b2eb37ecc58f3a9711f32b31a642c27e96ad2ab767/c94f4da9c540b7890c9350605f085bddc730ed40073c886ff94a2475bdfe806a-display-v1.webp" width="720"/>
</div>
<!--  -->
<!--  -->
## 3.5.0 ##
- تسبب تحديث selenium 4.10 في بعض المشاكل. الإصدار 3.5.0 متوافق ويثبّت selenium 4.9 أو أحدث. لم أعد أستطيع دعم الإصدارات الأقدم من 4.9.
- أزلت بعض الوسائط من المُنشئ: service_args, service_creationflags, service_log_path.
- أضفت دالة مولّدة find_elements_recursive، وهي دالة تسهيلية لأن الكثير من المواقع تبدو وكأنها تقدم محتوى مختلفًا من إطارات مختلفة، مما يصعّب استخدام find_elements
## 3.4.5 ##
- أسبوعٌ طويل. ظننت أن إصدار 3.4.0 قد تغلّب على آخر التطورات في خوارزميات كشف الأتمتة (هكذا اعتقدت)، ولكن يبدو أنه سبّب خطأً عند التفاعل مع العناصر على بعض أنظمة التشغيل. اضطررت للتراجع واستخدام طريقة مختلفة، وإصلاح الأخطاء، وفي النهاية تمكنت من التمسك بالفكرة الأصلية (+ إصلاح الأخطاء)
- التحديث إلى chrome 110 سبّب مفاجأة أخرى، هذه المرة لمستخدمي الوضع الخفي (HEADLESS).
- على الرغم من أن الوضع الخفي غير مدعوم رسميًا، إلا أنني قمت بتصحيحه!
- يسعدني أن أعلن أنه الآن غير قابل للكشف أيضًا (لكنه ما زال غير مدعوم ;))
- شكر خاص هنا إلى [@mdmintz](https://github.com/mdmintz) و[@abdulzain6](https://github.com/abdulzain6)
- شكر خاص أيضًا إلى [@sebdelsol](https://github.com/sebdelsol) لمساعدته في قسم المشكلات طوعًا تمامًا، لا بد أنك مجنون :)
### 3.4.0 ###
**تحديث كبير! كن حذرًا لأنه قد يكسر الكود الخاص بك -من المحتمل-.**
* أعدت كتابة آلية مكافحة الكشف؛ فبدلاً من إزالة المتغيرات وإعادة تسميتها، نحتفظ بها فقط، لكن نمنع حقنها في المقام الأول. سيبقينا هذا آمنين من الكشف على الأقل في المستقبل القريب.
* أعدت كتابة تسمية الملفات، لمنع النهاية بآلاف من ملفات {randomstring}_chromedriver.exe؛ بدلاً من ذلك يُسمى الملف undetected_chromedriver.exe فقط.
* التنظيف: أزلت ملفات compat وv2 ومجلد الاختبارات tests.
### 3.2.0 ###
* أضفت مثالًا يحتوي على بعض أكواد webdriver النموذجية، وإجابات عن الأسئلة الشائعة، والمزالق، مع عرض بعض الحيل للتخلص من الحاجة إلى تعدد الخيوط (multithreading).
### [>>>> example code here <<<<](https://github.com/ultrafunkamsterdam/undetected-chromedriver/blob/master/example/example.py)
* أضفت طريقة WebElement.click_safe()، التي يمكنك تجربتها إذا تم اكتشافك بعد النقر على رابط. ليست مضمونة النجاح.
* أضفت WebElement.children(self, tag=None, recursive=False)
للحصول على العقد الفرعية/العثور عليها بسهولة. مثال:
```
body = driver.find_element('tag name', 'body')
# get the 6th child (any tag) of body, and grab all img's within (recursive).
images = body.children()[6].children('img', True)
srcs = list(map(lambda _:_.attrs.get('src'), images))
```
* أضفت example.py حيث يمكنني توجيه الناس إليه عندما يطرحون أسئلة سخيفة
(لا، إنه رائع فعلاً، يجب أن يراه الجميع)
* أضفت دعمًا لمنصة lambda
* أضفت دعمًا لبنية x86_32
* أضفت دعمًا للأنظمة التي تظهر باسم linux2
* بعض إعادة هيكلة الكود
### 3.1.6 ###
### ما زال قويًا ###
- أصبح use_subprocess افتراضيًا على True. الكثيرون لا يفهمون تعدد العمليات و__name__ == '__main__'، وبعد الاختبار، يبدو أنه لم يعد يُحدث فرقًا في chrome 104+
- أضفت no_sandbox، وهو افتراضي على True، وهذا بدون الشريط المزعج "أنت تستخدم سطر أوامر غير آمن ...".
- حدّثت [صورة Docker](https://hub.docker.com/r/ultrafunk/undetected-chromedriver). يمكنك الآن استخدام vnc أو rdp للاتصال بحاويتك لرؤية نافذة المتصفح الفعلية
[](https://i.imgur.com/W7vriN9.mp4)
- بالطبع، يعمل الوضع "العادي" أيضًا
[](https://i.imgur.com/2qSNyuK.mp4)
### 3.1.0 ###
**هذا الإصدار `قد` يكسر الكود الخاص بك، اختبر قبل التحديث!**
- **أضفت منطقًا جديدًا لمكافحة الكشف!**