سلنیوم (Selenium) یک مجموعه ابزار و کتابخانه برای خودکارسازی اموری که با مرورگرها انجام می شوند است و برای زبان های برنامه نویسی مختلف کتابخانه دارد و برای مرورگرهای مختلف هم درایور دارد تا با استفاده از آن یک مرورگر تحت کنترل سلنیوم باز شود و شروع به انجام مواردی که برنامه ریزی شده اند بکند. بنقل از سایت خودش :
Primarily it is for automating web applications for testing purposes, but is certainly not limited to just that.
برای تست های مختلف نرم افزاری و زیرساخت و اتوماسیون کار با مرورگر مثل ورود اطلاعات یا ثبت نام و موارد مشابه کاربرد دارد و ابزار تخصصی و محبوب این کار است.
یعنی شما برنامه ریزی می فرمایید که فلان url را باز کن، در کد html دنبال فلان چیز بگرد، فلان چیز را تایپ کن، روی فلان المنت کلیک کن و هر کار دیگری که شما روی مرورگر انجام می دهید.
مثل بسیاری دیگری از ماژول های پایتون کارکردن با آن ساده تر از چیزی است که در ابتدا بنظر می رسد.
روی پایتون با یک pip install selenium براحتی نصب می شود، نصب کتابخانه سلنیوم برای محیط های مختلف اینجا توضیح داده شده است. باید درایور مربوط به مرورگر را هم نصب بفرمایید. در این بخش از مستندات نصب درایور به روش های مختلف و در زبان های مختلف توضیح داده شده است.
توجه بفرمایید که براساس "شرایط و قوانین استفاده از سرویسها و خدمات دیجیکالا" کاربران مجاز به استفاده از ربات و داده کاوی و موارد مشابه نیستند.
ما هم درحقیقت چنین کاری نمی کنیم، اکانت و اطلاعات هر کاربر متعلق به وی است و ما فقط در حال اتوماسیون امور مجاز مربوط به یک شخص کاربر هستیم.
کد زیر :
۰- نام کاربری و پسورد و تعداد کل سفارشات تحویل شده را می گیرد(بالای کد).
۱- یک مرورگر کروم را تحت مدیریت و کنترل سلنیوم باز می کند.
۲- آدرس /=https://www.digikala.com/users/login/?backUrl را که صفحه لاگین است در آن باز می کند.
۳- نام کاربری و سپس رمز عبور را وارد می کند.
۴- وارد صفحه =https://www.digikala.com/profile/orders/?activeTab=sent&page که لیست سفارشات تحویل شده است می شود، مقدار page معادل شماره صفحه است که در یک حلقه صفحه به صفحه فراخوانی می شوند. مقدار page براساس تقسیم تعداد کل سفارشات به ۱۰ که تعداد در هر صفحه است و گرد کردن نتیجه آن به بالا تعیین می شود. مثلا ً برای ۱۰۴ سفارش می شود ۱۱ صفحه.
۵- مبلغ سفارشات را در هر صفحه به یک لیست اضافه می کند و به سراغ صفحه بعد می رود. در اینجا اعداد فارسی مثل ۱ که درحقیقت کاراکتر هستند و عدد نیستند با تابع تعریف شده formatter به 1 که عدد است تبدیل می شوند که بتوان بسادگی جمع زد.
۶- در پایان مجموع لیست را که حاوی مبالغ است جمع می زند و چاپ می کند.
import time import math from selenium import webdriver from selenium.webdriver.common.by import By digiUser = "username" # digikala mobile or username digiPassword = "password" # digikala password ordersCount = 104 # total number of orders ordersPages = math.ceil(ordersCount/10) # number of orders pages to loop purchaseAmounts=[] # container of all purchases prices driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.digikala.com/users/login/?backUrl=/") # digkala login page time.sleep(5) driver.find_element(by=By.NAME, value='username').send_keys(digiUser) # enter username driver.find_element(by=By.TAG_NAME, value='form').submit() time.sleep(5) driver.find_element(by=By.NAME, value='password').send_keys(digiPassword) # enter password driver.find_element(by=By.TAG_NAME, value='form').submit() time.sleep(5) def formatter(x): x = x.replace(",","") x = x.replace("۱","1") x = x.replace("۲","2") x = x.replace("۳","3") x = x.replace("۴","4") x = x.replace("۵","5") x = x.replace("۶","6") x = x.replace("۷","7") x = x.replace("۸","8") x = x.replace("۹","9") x = x.replace("۰","0") return int(x) for i in range(1, ordersPages+1): url = "https://www.digikala.com/profile/orders/?activeTab=sent&page="+str(i) # go through orders pagination driver.get(url) time.sleep(10) p = driver.find_elements(by=By.CSS_SELECTOR, value='div.text-body1-strong div.color-800 div.text-body1-strong') for pp in p: purchaseAmounts.append(formatter(pp.get_attribute("innerHTML"))) # text inside = purchase amount print("============================") print("Total Purchases Count : "+ str(len(purchaseAmounts)) + " From Total " + str(ordersCount) + " orders") print("Total Purchases Amount : "+f"{sum(purchaseAmounts):,}"+ " (Toman)") print("============================")
مجموعه سلنیوم یک WebDriver دارد که برای اجرای برنامه نویسی اتوماسیون از آن استفاده می کنیم، مثل مثال بالا، یک IDE (Integrated Development Environment) دارد که یک ابزار برای توسعه test cases است و می تواند مثلاً اعمال شما را record کند که بعد همان را کد کنید و ... ، و یک Selenium Grid دارد که اجازه می دهد روی ماشین های مختلف و محیط های مختلف test case خودتان را اجرا کنید. اطلاعات بیشتر را اینجا مطالعه بفرمایید.