Photo by Austin Distel on Unsplash
隨著網站開發的規模及數量越來越多,以人工的方式來測試網站的功能非常的耗時且沒有效率,一定都想要透過撰寫腳本的方式來自動化測試網站上的各個功能是否正常執行,而Python專案中的Selenium套件(Package),即可讓網站自動化執行且能夠撰寫Python腳本來進行測試,解決上述的問題。
本文將利用Selenium套件(Package),自動化登入Facebook網站,並且滾動捲軸瀏覽貼文,透過基本的實作,來說明Selenium套件(Package)的重要概念及使用方式,包含:
本文將利用Selenium套件(Package),自動化登入Facebook網站,並且滾動捲軸瀏覽貼文,透過基本的實作,來說明Selenium套件(Package)的重要概念及使用方式,包含:
- Selenium是什麼
- Selenium WebDriver安裝
- Selenium啟動瀏覽器
- Selenium尋找網站元素
- Selenium填寫資料
- Selenium點擊按鈕
- Selenium執行JavaScript
一、Selenium是什麼
Selenium是一個瀏覽器自動化的套件(Package),可以利用Python撰寫自動化的腳本來執行各種的網站,包含開啟瀏覽器、填寫表單、點擊按鈕及取得網站內容等,多數用來執行網站功能的自動化測試,簡化繁瑣及耗時的網站測試工作,是Python自動化應用非常重要的套件(Package)。
建立PySeleniumPost專案,接著透過 pipenv install selenium 指令來為專案建立一個虛擬環境,並且安裝selenium套件(Package),最後,利用 pipenv shell 進入虛擬環境。
建立PySeleniumPost專案,接著透過 pipenv install selenium 指令來為專案建立一個虛擬環境,並且安裝selenium套件(Package),最後,利用 pipenv shell 進入虛擬環境。
二、Selenium WebDriver安裝
而要啟動特定的瀏覽器,需要手動安裝相應的WebDriver。本文將以Chrome瀏覽器來作為教學範例。
首先,前往Python套件庫PyPI,搜尋selenium,進入套件說明畫面後,在下面Drivers的地方,列出了常用的瀏覽器Drivers,如下圖:
首先,前往Python套件庫PyPI,搜尋selenium,進入套件說明畫面後,在下面Drivers的地方,列出了常用的瀏覽器Drivers,如下圖:
點擊Chrome的下載連結後,選擇要執行的Chrome版本,如下圖:
接著,依據作業系統下載安裝檔,如下圖:
解壓縮檔後,將其中的執行檔複製到PySeleniumPost專案的資料夾中即可,無需執行它。
三、Selenium啟動瀏覽器
回到PySeleniumPost專案,引用selenium套件(Package)中的webdriver模組(Module),其中包含了常用的瀏覽器類別(Class),而要自動啟動Chrome瀏覽器,需要建立Chrome類別(Class)的物件,傳入剛剛所下載的WebDriver路徑,接著即可透過get()方法(Method)前往網站,如下範例:
from selenium import webdriver
chrome = webdriver.Chrome('./chromedriver')
chrome.get("https://www.facebook.com")
執行程式碼後,就會自動開啟Chrome瀏覽器,前往Facebook網站。
為了在登入Facebook後,避免跳出訊息視窗,阻礙之後的自動化執行,可以引用chrome模組底下的Options類別,設定不啟用通知,並且在建立Chrome物件時,進行傳入,如下範例:
為了在登入Facebook後,避免跳出訊息視窗,阻礙之後的自動化執行,可以引用chrome模組底下的Options類別,設定不啟用通知,並且在建立Chrome物件時,進行傳入,如下範例:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--disable-notifications") #不啟用通知
chrome = webdriver.Chrome('./chromedriver', chrome_options=options)
chrome.get("https://www.facebook.com/")
四、Selenium尋找網站元素
Selenium套件(Package)提供了幾個常用的尋找網站元素方法(Method),包含利用id、name、CSS類別名稱、連結文字及XPath等屬性來尋找:
- find_element_by_id
- find_element_by_name
- find_element_by_class_name
- find_element_by_link_text
- find_element_by_xpath
當然Selenium除了提供以上的方法(Method)外,還有很多,這邊僅列出比較常用的。而使用的時機是以能夠辨識該元素的屬性來進行方法(Method)的選擇。
在開啟的Facebook網站中,按下F12,接著點擊「電子郵件或電話」輸入框右鍵,選擇檢查,可以看到如下圖的結構:
在開啟的Facebook網站中,按下F12,接著點擊「電子郵件或電話」輸入框右鍵,選擇檢查,可以看到如下圖的結構:
如果該元素有id屬性的話,用來尋找元素最為適合,因為同一個網頁的id屬性值不會重複,可以避免找錯網站元素。
以這個範例來說,可以利用Selenium套件(Package)的find_element_by_id方法(Method),透過傳入id屬性值來尋找「電子郵件或電話」輸入框元素。另外,「密碼」輸入框也是同樣的作法,如下範例:
以這個範例來說,可以利用Selenium套件(Package)的find_element_by_id方法(Method),透過傳入id屬性值來尋找「電子郵件或電話」輸入框元素。另外,「密碼」輸入框也是同樣的作法,如下範例:
email = chrome.find_element_by_id("email")
password = chrome.find_element_by_id("pass")
五、Selenium填寫資料
取得網站的元素後,接著要自動化輸入「電子郵件或電話」及「密碼」的欄位資料,可以透過send_keys()方法(Method),傳入要填寫的資料內容,如下範例:
email.send_keys("your email")
password.send_keys("your password")
執行程式碼,Facebook網站即會自動填寫傳入的資料。六、Selenium點擊按鈕
最後,呼叫click()方法(Method)點擊登入按鈕,即可自動登入,如下範例:
login = chrome.find_element_by_xpath("//*[@value='登入']")
login.click()
另外,點擊按鈕也可以呼叫submit()方法(Method),進行送出的動作,如下範例:
假如登入Facebook後,想要撰寫JavaScript程式碼來滾動捲軸,Selenium套件(Package)提供了execute_script()方法(Method),可以用來執行JavaScript程式碼,如下範例:
email.send_keys("your email")
password.send_keys("your password")
password.submit()
七、Selenium執行JavaScript
for x in range(1, 5):
chrome.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(3)
範例中利用Chrome物件呼叫execute_script()方法(Method),來執行滾動捲軸的JavaScript程式碼,外層再透過Python迴圈,來定義要重複執行的次數,而為了避免捲動速度過快,可以選擇性的引用時間模組(import time),呼叫sleep()方法(Method),讓每一次的捲動,都暫停3秒後再執行。八、小結
以上就是Python的網站自動化套件Selenium的基本使用方式教學,往後在實務上即可運用其中的概念,提升網站自動化測試的效率。如果在練習的過程中有碰到任何問題,或是有不錯的Selenium自動化應用實例及技巧,歡迎留言分享。
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊
Python網頁爬蟲推薦課程
你可能有興趣的文章
請問這段話的意思
回覆刪除from selenium.webdriver.chrome.options import Options
selenium.webdriver. 是selenium套件下的webdriver模組
selenium.webdriver.chrome.options這段式甚麼意思呢?