自從開發環境轉移到 Mac OS 後,倒是沒有在這環境下測試用 Selenium 去控制瀏覽器,不過我並不想控制 Safari ,因為它不是一個跨平台的瀏覽器。
第一次使用 Selenium 是學習 Web Crawler 的過程中發現,在瀏覽器中可見的物件並不代表一定爬得到(初心者😗),於是我了解到那些自己抓不到的數據是由 JavaScript 所動態產生的,因為我向目標伺服器所發出的 request 只能取得靜態的數據,若要進行進階的動態網頁資料擷取,那麼我就必須學習如何用程式碼去控制瀏覽器。
Install Selenium
shell
$ pip3 install selenium
Download Chrome Driver
要讓 Selenium 能夠控制 Chrome 瀏覽器,需要對應版本的 ChromeDriver,例如我的 Chrome 為目前的最新版本 76.0.3809.100,那麼我就下載 ver.76 最新的 76.0.3809.68 版本 ChromeDriver,然後把 ChromeDriver 放在適當的路徑下,以便在程式中呼叫。
Test
python
#!/usr/bin/env python3
# coding:utf-8
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def getChrome(show=False): # return chrome handler
WINDOW_SIZE = "1366, 768" # screen size
CHROMEDRIVER_PATH = r"/Users/nick/Downloads/chromedriver"
options = Options() # config
options.add_argument("log-level=3") # shut the logging
options.add_argument("--window-size=%s" % WINDOW_SIZE)
if not show: options.add_argument("--headless") # headless mode
return webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)
chrome = getChrome()
chrome.get("https://laplacetw.github.io/categories/")
time.sleep(1)
chrome.save_screenshot("screenshot.png")
chrome.quit()
測試程式若順利執行的話,在檔案目錄下應該會發現多了個執行畫面的截圖 :
getChrome()預設會用 headless 模式啟動 Chrome,若想顯示使用者介面的話可以將 "show" 這個參數設為 True,如此便能看到自動化執行 Chrome 的過程。但實際應用的情況下非必要就別啟動圖形介面了,執行速度會快很多的😎