Selenium 是什麼

Selenium 是什麼?用 Python Selenium 自動爬網頁抓報表,初學者必看的簡單教學

Last Updated on

如果你是個投資達人,每天要關注很多財經新聞;或者你是個房地產或法拍專家,每天要獲取即時的房價狀況、法拍公告 ……,我相信每天做重複動作查找資訊對你來說一定很煩。

更別提資訊來源網站很多,要一一打開簡直『煩死了』,所以需要一個自動化工具來幫你做這些重複的事,而用 Python 程式碼寫一個網路爬蟲自動從網站蒐集資料不失為一個好方法,大大簡化提取過程。

許多企業也利用爬蟲擷取對手的公開資訊,比如知名大零售商沃爾瑪(Walmart)很依賴它來掃描競爭對手的網站,及時調整自己的商品價格,因為小小 50 美分的差價就極可能導致失去一筆訂單。

爬蟲是 Python 最擅長也最初階的練習功能之一,如果你完全是個程式新手,別擔心!Python 有非常多功能強大的函式庫或套件可以方便使用,本文將介紹其中一個最常用的 – Selenium

Selenium 是什麼?

Selenium

Selenium 是用於自動化 Web 瀏覽器的工具,可以協助測試人員做自動化測試,也是可以抓網頁內容的動態網頁爬蟲,常搭配 BeautifulSoup 解析 HTML 網頁原始碼。


Selenium 應用

其主要的 2 大應用為:

自動化測試

Selenium 自動化測試框架主要用作網頁測試可以直接驅動瀏覽器,模擬真正的使用者操作網站,包含打開瀏覽器、點擊或連結、輸入文字、取得網頁內容或內容比對驗證等,滿足許多測試需求。

當一個系統程式非常龐大且複雜,所有測試環節都需要由測試人員層層手動驗證時,很容易因測試人員不同、測試步驟疏漏,間接或直接導致測試的驗證內容有誤或不一致。

但 Selenium 的自動化框架可以輕鬆達到自動化測試,消除人為因素的錯誤,節省測試手動驗證的時間,大幅提升測試內容的準確度和一致性。


網頁抓取 (Web Scraping)

網頁抓取,或白話一點稱作『網路爬蟲』,顧名思義就是用來自動提取網頁內容的應用程式,並把這些內容轉換成容易理解的格式呈現出來。

你可能疑惑,要抓網頁裡面的文字或圖片不是直接複製貼上或截圖就好了嗎?但抓 1 筆容易,抓 100 甚至 1000 筆呢?想想就覺得心累!所以需要一個程式或可以說一個機器人自動做這些重複又耗時的事情。

在 Python 中,最簡易又陽春的爬蟲是直接用 Requests 套件把整個 HTML 網頁抓下來再解析,但遇到一些很難爬的網站(例如 google arts & culture),很難直接用 Requests 攻破。

Selenium 利用瀏覽器執行 JavaScript,不需要不斷測試攻破點,不過它的缺點是很慢。

ps. JavaScript 是世界上絕大多數網站用來開發的一種程式語言,被世界主流瀏覽器(Chrome、IE、Firefox、Safari …)支援。


Selenium 工具操作

使用前要先了解 Selenium 支持運作的環境:

Selenium 支持的作業系統Microsoft Windows、macOS、Linux
Selenium 支持的瀏覽器Chrome、Firefox、Microsoft Edge、IE、Safari、Opera
Selenium 支持的程式語言Python、Java、JavaScript、C#、Ruby、Kotlin

ps. 如果遇到任何問題或想建議增加什麼功能在未來的版本,都可以隨時到 Selenium 的 GitHub 回報。(點我到 Selenium 的 GitHub Issues Page)


Selenium 工具包

目前有 3 個主要的工具包:Selenium WebDriver、Selenium IDE、Selenium Grid。(點我到官網下載工具包)

Selenium工具包

Selenium WebDriver

WebDriver 是用來控制 Web 瀏覽器的行為,Selenium 支持的每一個瀏覽器都有各自相對應的驅動程式(driver), 利用 driver 可使瀏覽器自動化,讓操作就像是真的使用者在操作一樣。

Selenium 的 WebDriver 有:


Selenium IDE

Selenium IDE (Selenium Integrated Development Environment) 提供記錄和回放 Web 自動化測試,它可以說是 Selenium 的入門學習工具,即使不會寫程式碼,也能用錄製的方法建立自動化測試

IDE 是一種輔助程式開發的應用軟體,可以快速建立腳本(script);也是一種輔助軟體測試的應用軟體,在工具內部就能輔助編寫程式碼,並編譯打包成可執行的程式。

Selenium IDE 是 open source,可以下載 Chrome 和 Firefox 的擴充套件,快速安裝並使用。(Chrome 版本下載請點我 / Firefox 版本下載請點我)

若只是單純測試 Web 文字、畫面元素與流程是否正常,可以直接使用 Selenium IDE 做自動化測試,但複雜的測試(比如需要前置資料準備動作、Data-Driven 或驗證資料庫等)就得搭配自己寫的程式碼才能完成。

不過,其實我覺得 Katalon Recorder 更好用,操作起來更直覺,相當推薦給初學者。Katalon Recorder 是類似 Selenium IDE 的擴充套件,同樣可以錄製 Web 的操作並回放。(Chrome 擴充工具下載請點我)


Selenium Grid

若想在多台機器上同時啟動多個瀏覽器對 Web 應用程式並行測試,可以使用 Selenium Grid。

運作原理:

Selenium Grid 組成
  1. 先將一台機器作為 Selenium hub,其它台機器(nodes)對 Selenium hub 註冊 Selenium RC。
  2. 當 client 對 Selenium hub 發出測試請求時,由 Selenium hub 對已註冊的其它機器發出請求,驅使各台機器啟動瀏覽器進行測試。

簡單實作示範 – 從 Goodinfo! 列印 PDF 報表

本段落將結合 Selenium 的自動化與爬蟲功能做一個簡單的範例,如果你已經是寫程式的能手,可以快速滑過或跳過不看!

想像你是一個熱衷投資股票和 ETF 的專家,每天都要鎖定好幾個股票和 ETF 擷取線圖和其他統計資訊,但一個個點開網頁很花時間又單調,你需要一個小幫手自動幫你統整,所以想開發一個簡單的小程式。

這裡以自 Goodinfo!台灣股市資訊網 抓 ETF – 0050 的報表為例,其他股票或 ETF 請自行以此類推,其他網站或用途當然也請自行延伸、舉一反三!

預備事項

  1. 準備好 Python 開發環境,並安裝 Selenium 函式庫
  2. 下載 WebDriver
  3. 下載 Katalon Recorder (ps. 前面提到 Selenium IDE 的替代工具 Katalon Recorder 適用於較簡單的操作,用起來較直覺,這裡也利用 Katalon Recorder 來產生 Python 程式碼)

設計步驟

  1. 錄製並自動產生程式碼
  2. 抓取網頁內容
  3. 設定程式自動執行

ps. 如果你是程式新手,記得撰寫程式的首要任務是釐清「到底要做什麼」,好好設計流程會讓你事半功倍,也能幫助你訓練邏輯,這是該具備的正確心態。

延伸閱讀 :學程式應具備的心態是什麼?

#1 錄製並自動產生程式碼

step 1

打開 Katalon Recorder,並新增 case。

Katalon Recorder steps

step 2

點擊「Rec.」鍵開始錄製網頁操作步驟。

Katalon Recorder Rec

step 3

打開目標網站(Goodinfo!台灣股市資訊網),讓 Katalon Recorder 記錄你的操作,做完後記得回到 Katalon Recorder 點「Stop」結束錄製。

Goodinfo範例

step 4

點選「Export」就會把剛剛紀錄的動作自動產生程式碼,節省寫程式的時間。

Katalon Recorder 記錄

可以選擇想產生的程式碼,比如 C#、Java、Python、XML ……。

Katalon Recorder steps

step 5

將所得到的程式碼整理如下:

Selenium Python 程式碼

#2 抓取網頁內容

如果你想抓目標網頁內的某段文字或圖片,可以利用 Selenium 抓出某個段落後,再用 BeautifulSoup 去掉 HTML 語法、萃取內容。

但在這個範例,單純想把關注的股票或 ETF 的報表整合成 PDF 檔,如下圖:

Selenium print PDF

所以只需多做一些 WebDriver 的設定匯出 PDF 檔,程式碼如下:

Selenium Python 程式碼_列印

完整程式碼

Selenium Python 程式碼示範

ps. 想參考這段程式碼,可到 GitHub 複製(連結請點我)。

ps. 小碎念:若只想知道怎麼用,可以直接複製貼上程式碼,但若想當一個專業的程式開發工程師,建議還是要多花時間理解這一行行程式碼在幹嘛(可參考此 Stackoverflow 連結)。


#3 設定程式自動執行

如果每天都要做一樣的事情,你可以設定定時器(scheduler)讓你的小程式每天固定時間自動被執行,最簡單的是直接用作業系統已有的定時器,例如 Windows 的 Task Scheduler。

或者,也有一些別人開發好的小工具可以免費下載,例如 RobotIntern 我就覺得蠻好用的。


其他注意事項

Selenium 爬蟲速度較慢

由於模擬一般使用者瀏覽網頁的所有習性,因此 Selenium 爬蟲速度會比較慢,同時又仰賴網速、消耗大量 CPU 資源。


當目標網頁改變,程式碼可能要更新

如果你抓的不是自己開發的網站,當網頁架構改變時,你所寫的爬蟲程式碼要跟著修改,否則可能會抓不到內容。

ps. 可以按 F12 鍵審視網頁架構:

Goodinfo範例區塊

有的網站會防爬蟲

有些較專業的網站會有防爬蟲機制,比如 Amazon 網站就有,防止 Walmart 或其他競爭者不時來爬自己的網站抓取商品定價 …。

如果想得到這些網站的資料,有些可以讓你申請它們的 API,有的免費有的則要付費,而 API 的好處是不需擔心網頁架構改變程式碼要跟著更新,因為資料格式幾乎都是固定的。


結論

Selenium 非常實用,許多 Web Test Framework 都以 Selenium API 當作基礎,藉此操作網頁表單資料、點選按鈕或連結、取得網頁內容並進行檢驗。

我自己也利用 Selenium 搭配 scheduler 工具定時自動完成相當多工作,大量縮減自己的工時,比如自動撈資料並更新資料庫、自動抓報表並寄給老闆 …,希望你也能用它來幫自己節省時間、提升工作效率。


如果覺得這篇文章有幫助,請幫我拍手 5 下鼓勵我、支持我,讓我繼續有創作的動力!

如果有任何問題或想分享的資訊,歡迎在下方留言!

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *