Skip to content
使用 Selenium 模組控制瀏覽器
📆2019-08-11 | 📂Data Science

自從開發環境轉移到 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()

測試程式若順利執行的話,在檔案目錄下應該會發現多了個執行畫面的截圖 : 5qmRipW.png

getChrome()預設會用 headless 模式啟動 Chrome,若想顯示使用者介面的話可以將 "show" 這個參數設為 True,如此便能看到自動化執行 Chrome 的過程。但實際應用的情況下非必要就別啟動圖形介面了,執行速度會快很多的😎

Last updated: