مكتبة سيلينوم (Selenium)

2

تخيل أنك تعمل في أكثر وظيفة مللاً في العالم : وظيفة نسخ و تعبئة البيانات ، وطُلب منك نسخ آلاف المدخلات من ملفات الاِكسل كل واحدة على حِدة وادخالها لموقع اِلكتروني معين بطريقة يدوية لعينة ! كم من الوقت سيتطلب منك الأمر ؟ وكم من الجهد ؟!

عن طريق مكتبة سيلينوم (Selenium) تستطيع عمل برمجية بايثون من بضعة أسطر فقط، لِتقوم بنسخ البيانات تلقائيا وادخالها للموقع وكأن الأشباح تقوم بالعمل عوضاً عنك !


هذا مجرد مثال سطحي ، فمشروع سيلينيوم (Selenium) بالأساس هو بيئة عمل محمولة لاختبار تطبيقات الويب عن طريق  كتابة سيناريوهات لعمل التصفح التلقائي  (Web Automation) ومحاكاة سلوكيات المستخدم على مواقع الانترنت : كالنقر على الأزرار والروابط وادخال النصوص وعمليات تسجيل الدخول .. الخ . باختصار تستطيع عمل أتمتة كاملة للمتصفح . 

لماذا نستخدم سيلينيوم :
- اختبار أداء مواقع وتطبيقات الويب والبحث عن الثغرات الأمنية واستغلالها .
- أتمتة الويب (Web Automation)عبر تسجيل خطوات واعادة تكريرها عن طريق المتصفح .
- عمل بعض هجمات القوة الغاشمة (Brute-force attacks) البسيطة جداً للمبتدئين لتخمين كلمات المرور عبر تجربة ادخال مجموعة من الكلمات .
- عمل هجمات السبام عبر أتمتة المنشورات والرسائل والتعليقات في مواقع التواصل .
- والمزيد ..



 المتصفحات التي يعمل معها selenium webdriver :
  • Firefox
  •  Chrome
  • Internet Explorer
  • Safari
  • Opera
  • PhantomJS (متصفح بدون واجهة رسومية)
تثبيت مكتبة سيلينيوم :
 
 لتشغيل المكتبة تحتاج الى Python 2.6, 2.7 أو Python 3.3 أو النسخ التي بعدها .
تثبيت عبر أداة pip :
  pip install -U selenium
 الموقع الرسمي :
  http://seleniumhq.github.io/selenium/docs/api/py/index.html


مثال بسيط على استخدام سيلينيوم :

# استيراد المكتبة
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

#  استدعاء متصفح فيرفوكس
driver = webdriver.Firefox() 
 
# python.org فتح موقع 
driver.get("http://www.python.org")

# البحث عن مربع البحث بالصفحة وتحديده
elem = driver.find_element_by_name("q") 
 
# مسح محتوى مربع البحث 
elem.clear() 
 
# "python 3 " اِدخال كلمة البحث 
elem.send_keys("python 3 ")
 
# نقر زر  enter
elem.send_keys(Keys.RETURN) 
 
# اغلاق نافذة المتصفح
# driver.close()


التعليقات