動態網頁爬蟲第一道鎖 - Selenium教學:
如何使用Webdriver、send_keys(附Python 程式碼)

大家好,歡迎來到爬蟲的世界!為了因應大家的動態網頁的出現,本系列文章將和大家分享,如何善用 Selenium 爬蟲工具 ,讓爬蟲技巧更聰明~~
初學爬蟲的人,大多從靜態網頁開始入門。但對於時下最常用的FB及IG的大量資訊,是否也非常想要小試身手!?

  動態網頁爬蟲不知道怎麼爬嗎?本系列文章,將帶大家從動態網頁的必備最佳助手Selenium入門。Selenium它就是模擬一般消費者瀏覽的網頁的所有習性,也因此爬蟲速度會較慢、同時也仰賴網速及消耗大量cpu!但!它絕對是資料科學領域不可不學的爬蟲工具!

  本篇文章會依序介紹以下7大步驟,讓大家可以依此打開動態網頁爬蟲第一道鎖:

  1. Selenium 介紹
  2. Selenium 安裝
  3. Webdriver 下載
  4. Chromedriver 使用
  5. 使用Selenium輸入及點擊
  6. send_keys模擬鍵盤輸入
  7. 瀏覽紀錄

1. Selenium 介紹

  Selenium提供了一個簡單的API應用程式介面(英語:Application Programming Interface),使用者可以利用Selenium Webdriver 編寫功能及測試。

2. Selenium 安裝

  在python裡執行以下程式碼,即可安裝Selenium套件。

pip install selenium

3. Webdriver 下載

  要使用Selenium爬蟲前,Webdriver是必備的,而不同的瀏覽器會有不同的driver。以下提供四種常見的瀏覽器driver供大家參考及下載。

  1. Chrome
  2. Edge
  3. Firefox
  4. Safari

  選定了瀏覽器,在下載前,請記得檢查目前的瀏覽器版本,再下載對應的Webdriver,之後也要適時更新版本以維護程式碼運行喔!

以下針對大家較常使用的Chromedriver做介紹~

4. Chromedriver 使用

# 載入需要的套件
from selenium import webdriver
# 開啟瀏覽器視窗(Chrome)
# 方法一:執行前需開啟chromedriver.exe且與執行檔在同一個工作目錄
driver = webdriver.Chrome()
# 方法二:或是直接指定exe檔案路徑
driver = webdriver.Chrome(“桌面\chromedriver”)

  雖這裡只提供了Chromedriver的程式碼範例給大家,但是不用擔心~

  若是想要運用以上其他的瀏覽器,那只要在瀏覽器的名稱上作更改,其他的方法幾乎一樣,如下程式碼。有興趣的同好,可以多試幾個不同的瀏覽器方法。

driver = webdriver.Firefox()
driver = webdriver.Safari()

  開啟網頁後,使用get()輸入網址,即可前往特定網頁。close()則可關閉目前網頁視窗。

driver.get("http://www.google.com") # 更改網址以前往不同網頁
driver.close() # 關閉瀏覽器視窗

5. 使用Selenium輸入及點擊

  可以使用在網頁需要輸入某個字串才能執行下一步驟時,例如:輸入帳號密碼、搜尋特定關鍵字等等。

  以google首頁為例,假設:我們需要搜索關鍵字「Selenium Python」,那就必須先找到搜尋框的網頁元素(Web element),如圖一。

555
圖一、找到需要的網頁元素

  程式碼如下:

# 定位搜尋框
element = driver.find_element_by_class_name(“gLFyf.gsfi”)
# 傳入字串
element.send_keys(“Selenium Python”)

  回到受Webdriver控制的網頁,神奇的事情發生了!搜尋框裡有文字了,如圖二所示。

666
圖二、send_keys之後的網頁

  如果想要刪掉原先已經輸入的文字,可以使用clear()清除網頁元素原先的字串或搜索詞。

element.clear()

那填入關鍵字之後,要怎麼點擊搜尋按鈕呢?

  找到按鈕的網頁元素後,使用click()點擊就可以啦!

button = driver.find_element_by_class_name(“gNO89b”)
button.click()

  執行以上程式碼之後網頁就會點擊搜尋按鈕並前往搜尋頁面(注意:搜尋框裡要有東西)。

777
圖三、使用Selenium點擊搜尋按鈕的結果

看!是不是很厲害呢!大家可以自行更改搜尋關鍵字,或是嘗試不同網頁練習看看喔!

6. send_keys模擬鍵盤輸入

  send_keys除了輸入文字內容以外,也可以執行keyboard上的所有動作喔!

  先載入需要的套件:

from selenium.webdriver.common.keys import Keys

  以下是keys類別裡所有鍵的內容,若非功能鍵,例如:a、b、c等等,直接使用就可以了!

  左邊是主要的變數名稱,右邊則是按鍵對應到的Keys代碼,如下程式碼。

"""Set of special keys codes."""
NULL = '\ue000'
CANCEL = '\ue001' # ^break
HELP = '\ue002'
BACKSPACE = '\ue003'
BACK_SPACE = BACKSPACE
TAB = '\ue004'
CLEAR = '\ue005'
RETURN = '\ue006'
ENTER = '\ue007'
SHIFT = '\ue008'
LEFT_SHIFT = SHIFT
CONTROL = ‘\ue009’
LEFT_CONTROL = CONTROL
ALT = ‘\ue00a’
LEFT_ALT = ALT
PAUSE = ‘\ue00b’
ESCAPE = ‘\ue00c’
SPACE = ‘\ue00d’
PAGE_UP = ‘\ue00e’
PAGE_DOWN = ‘\ue00f’
END = ‘\ue010’
HOME = ‘\ue011’
LEFT = ‘\ue012’
ARROW_LEFT = LEFT
UP = ‘\ue013’
ARROW_UP = UP
RIGHT = ‘\ue014’
ARROW_RIGHT = RIGHT
DOWN = ‘\ue015’
ARROW_DOWN = DOWN
INSERT = ‘\ue016’
DELETE = ‘\ue017’
SEMICOLON = ‘\ue018’
EQUALS = ‘\ue019’
NUMPAD0 = ‘\ue01a’ # number pad keys
NUMPAD1 = ‘\ue01b’
NUMPAD2 = ‘\ue01c’
NUMPAD3 = ‘\ue01d’
NUMPAD4 = ‘\ue01e’
NUMPAD5 = ‘\ue01f’
NUMPAD6 = ‘\ue020’
NUMPAD7 = ‘\ue021’
NUMPAD8 = ‘\ue022’
NUMPAD9 = ‘\ue023’
MULTIPLY = ‘\ue024’
ADD = ‘\ue025’
SEPARATOR = ‘\ue026’
SUBTRACT = ‘\ue027’
DECIMAL = ‘\ue028’
DIVIDE = ‘\ue029’
F1 = ‘\ue031’ # function keys
F2 = ‘\ue032’
F3 = ‘\ue033’
F4 = ‘\ue034’
F5 = ‘\ue035’
F6 = ‘\ue036’
F7 = ‘\ue037’
F8 = ‘\ue038’
F9 = ‘\ue039’
F10 = ‘\ue03a’
F11 = ‘\ue03b’
F12 = ‘\ue03c’
META = ‘\ue03d’
COMMAND = ‘\ue03d’

  若是您想要使用經常用到的「複製」-「ctrl+c」、「貼上」-「ctrl+v」功能,那要怎麼做呢?

  如下述程式碼所示,對想要進行複製貼上的網頁元素使用send_keys,並在同樣的send_keys內包含一起使用的功能鍵就可以了。

element.send_keys(Keys.CONTROL, "c")
element.send_keys(Keys.CONTROL, "v")

7. 瀏覽紀錄

  至於網頁前後的瀏覽紀錄,那也非常的簡單,如下程式碼所示:

  前往下一項瀏覽紀錄

driver.forward()

  前往上一項瀏覽紀錄

driver.back()
以上7大步驟,已經帶您打開進入Selenium網頁爬蟲的大門了!之後的文章,我們會繼續和大家分享selenium在不同動態網頁的應用。

作者:戴若竹(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究有限公司創辦人)

更多實戰案例及情境好文推薦

回到頂端