2024/11/08
12127

Selenium 教學:5 分鐘學會基本自動化操作,快速掌握核心指令

Selenium 教學:5 分鐘學會基本自動化操作,快速掌握核心指令
Selenium 是一個功能強大的工具,廣泛應用於自動化測試與網頁抓取,尤其在 Python 程式語言 中,學會應用 Selenium 能大幅提升工作效率!本篇 Selenium 教學將帶領你快速掌握 Selenium 的基本操作,助你在 5 分鐘內學會如何進行網頁自動化操作。

Selenium 安裝教學

  1. 安裝 Selenium

    首先,我們需要安裝 Selenium Python 模組。你可以在命令提示字元 (CMD) 執行以下指令,來安裝 Selenium 客戶端 API。
     
    pip install selenium

  2. 安裝 WebDriver

    為了讓 Selenium 可以控制瀏覽器,還需要安裝對應的 WebDriver。以 Chrome 為例,你可以從 ChromeDriver 官方網站 下載與 Chrome 版本相匹配的驅動程式,並將其解壓縮到指定路徑。

    下載與 Chrome 版本相匹配的 Selenium 驅動程式,並將其解壓縮到指定路徑。
    從上圖可以看到目前的 Chrome 版本號碼,並選擇 Stable(穩定版)。
     
    這邊需提醒,要選擇的是「chromedriver」,並且根據作業系統選擇對應的版本。
    將右側的網址複製到搜尋欄後,就可以成功下載「chromedriver-win64.zip」,將檔案解壓縮後與程式放置在同一資料夾內即可。
    這邊需提醒,要選擇的是「chromedriver」,並且根據作業系統選擇對應的版本。若以 64 位元為例,將右側的網址複製到搜尋欄後,就可以成功下載「chromedriver-win64.zip」,將檔案解壓縮後與程式放置在同一資料夾內即可。


    我們可以從 Chrome 的「設定」→「關於 Chrome」查詢版本號碼。
    但要小心!如果你的 Chrome 曾更新過,並且版本號碼與 Chromedriver 不同,就需重新下載相同版本的 Chromedriver。我們可以從 Chrome 的「設定」→「關於 Chrome」查詢版本號碼。

  3. 測試環境驗證

    完成安裝後,你可以藉由以下簡單的程式碼,來驗證環境是否配置成功;如果程式成功輸出"Google",那麼你的 Selenium 環境已經配置妥當。不過,需留意的是,此程式碼檔案必須要與Chromedriver.exe放在同一個資料夾內,才能正常運作。
     
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('https://www.google.com')
    print(driver.title) # 輸出:Google
    driver.quit()

Selenium 教學:基本操作

  1. 打開瀏覽器並訪問網頁

    Selenium 可以模擬使用者行為,如打開瀏覽器並訪問特定網頁。這是自動化流程的第一步,通過 get() 函式即可訪問任何目標 URL,因此非常適合用來自動導航至需要測試或抓取的網站。

    【Selenium 教學範例】
     
    # 打開瀏覽器並訪問指定的網頁
    driver.get('https://www.google.com/')

    此範例中,Selenium 自動打開瀏覽器並導航至 https://www.google.com/。

  2. 查找和操作網頁元素

    使用 Selenium,你可以通過多種方式來查找網頁中的元素,常見的方法包括 ID、名稱、XPath 等。找到元素後,你可以進行操作,例如輸入文字或點擊按鈕。

    【Selenium 教學範例】

    Selenium 找到 ID 為 search_box 的元素,並模擬鍵盤輸入 'Selenium 教學'。
    # 使用 ID 查找搜尋框並輸入文字
    element = driver.find_element_by_id('search_box')
    element.send_keys('Selenium 教學')

    也可以用不同的方式搜尋想查找的目標,因為有時候該元素之下還有許多物件在裡面,而這些物件都有不同的特性,例如:CLASS_NAME、CSS_SELECTOR、TAG_NAME、XPATH等等,以達到不同的目的。
    # 使用不同方式查找特定元素
    fruits = driver.find_element(By.CSS_SELECTOR,"#fruits .tomatoes")
    tomato = fruits.find_element(By.CLASS_NAME,"tomatoes")
    plants = driver.find_elements(By.TAG_NAME, "li")
    element = driver.find_element(By.XPATH, '//ul')

    面對不同的網頁,根據不同的目標就要調整搜尋元素的方式與順序,這部分需要耐心拆解網頁原始碼,也需要一點點 HTML 的相關知識。可在 Chrome 中按下 F12,即可看到網頁原始碼。
     
    可在 Chrome 中按下 F12,即可看到網頁原始碼。

  3. 等待元素載入

    動態網頁通常需要時間來載入內容。為了確保元素已完全載入,可使用 Selenium 顯式等待與隱式等待的方法來處理。

    【Selenium 教學範例】顯式等待

    顯式等待允許你指定等待條件,直到條件滿足或超過最大等待時間為止。在以下的 Selenium 教學範例中,Selenium 會等待最多 10 秒,直到 ID 為 element_id 的元素出現為止。
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    # 等待 ID 為 'element_id' 的元素載入完成
    element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'element_id'))
    )

    【Selenium 教學範例】隱式等待

    而隱式等待則會在全局範圍內設置一個等待時間,當找不到元素時,Selenium 會在這段時間內持續嘗試,直到找到元素或超過時間限制。因此,隱式等待適合用於需要大量抓取資料的情境,能確保每個元素都有充足的時間載入。
    # 設定全局隱式等待時間為 10 秒
    driver.implicitly_wait(10)

Selenium 教學:進階功能

  1. 自動化表單提交
    在進行網頁自動化操作時,Selenium 可以模擬使用者的行為,自動填寫並提交表單,這在需要自動進行登錄操作或提交搜索內容時非常實用。只需找到表單元素、並調用 submit() 函式即可。

    【Selenium 教學範例】

    此 Selenium 教學範例將定位到 ID 為 login_form 的表單,並自動提交該表單。
    # 找到表單元素
    form = driver.find_element_by_id('login_form')

    # 自動提交表單
    form.submit()

  2. 處理動態網頁內容
    當面對 AJAX 或 JavaScript 生成的動態網頁內容時,傳統的靜態抓取方法會無法正常運作;而 Selenium 提供了顯式及隱式的等待函式,以確保內容載入完成後再進行抓取。

    【Selenium 教學範例】

    此範例中,程式會等待最多 10 秒,直到 ID 為 dynamic_element_id 的元素被載入完成,然後進行後續操作。
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    # 顯式等待,直到特定元素載入完成
    element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'dynamic_element_id'))
    )

    # 抓取動態網頁的元素
    print(element.text)

  3. 控制 iframe 和彈出視窗
    部分網頁有設置 iframe 或彈出視窗,這時我們需要切換至這些特殊的頁面區域才能正常操作。Selenium 提供了 switch_to.frame() 函式以切換至特定的 iframe,或使用 switch_to.alert() 來處理彈出視窗。

    【Selenium 教學範例】控制 iframe

    iframe 全名為 inline frame,意思是內嵌框架,它的作用是讓其他網站頁面能夠被放在另一個網站頁面裡面,比如被放在網站中的 YouTube 影音或 Google 地圖等。當網頁設有 iframe 時,必須切換到 iframe 內部才能操作其內容。
    # 切換到指定的 iframe
    driver.switch_to.frame('frame_name')

    # 在 iframe 中進行操作
    element_in_frame = driver.find_element_by_id('inside_frame_element')
    print(element_in_frame.text)

    # 切換回主頁面
    driver.switch_to.default_content()

    【Selenium 教學範例】控制彈出視窗

    如果網頁彈出了警告視窗,你需要先切換到該視窗,並執行相應的操作,例如接受或關閉,後續才能繼續操作目標網頁。
    # 切換到彈出視窗
    alert = driver.switch_to.alert

    # 接受彈出視窗
    alert.accept()
    print(element_in_frame.text)# 等同按下「確認」或是「OK」

    因此,以上這段程式碼會在彈出視窗時切換到該視窗並按下「確認」。如果你想要改為關閉彈出視窗,類似於按下「取消」或「Cancel」按鈕,可以將 alert.accept() 替換為 alert.dismiss()

如何使用 Selenium 進行網頁抓取?

  1. 抓取靜態網頁內容
    靜態網頁指的是內容在伺服器端生成,當你請求網頁時,它的內容不會根據 JavaScript 進行改變。因此,使用 Selenium 抓取靜態網頁內容的操作非常簡單,只需查看網頁並且提取網頁原始碼,就可以進行後續處理。

    【Selenium 教學範例】

    Selenium 會抓取當前頁面的 HTML 原始碼並輸出。這對於靜態網站如部落格或簡單的資訊頁面來說非常實用。
    # 抓取靜態網頁內容
    page_source = driver.page_source
    print(page_source)

  2. 抓取動態網頁內容
    動態網頁通常由 JavaScript 在客戶端載入內容,常見如新聞網站或社交媒體平台。而 Selenium 能夠通過模擬使用者的行為,等待 JavaScript 完成載入後,抓取動態生成的內容。

    【Selenium 教學範例】

    在以下範例中,Selenium 會等待 ID 為 dynamic_element_id 的元素載入完成,接著抓取網頁內容。
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    # 訪問動態網頁
    driver.get('https://example.com/dynamic_page')

    # 等待 JavaScript 生成的內容載入完成,直到特定元素出現
    element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'dynamic_element_id'))
    )

    # 抓取動態網頁的 HTML 原始碼
    page_source = driver.page_source
    print(page_source)
 

想成為 Python 爬蟲高手?你必須學會的爬蟲套件 Selenium!

Python 在爬蟲領域一直是首選程式語言,因為簡單易學且擁有強大的第三方庫,能夠快速實現資料抓取與處理。尤其是在面對需要模擬使用者操作的動態網頁時,使用 Selenium 結合 Python 的強大功能,可以自動化模擬點擊、滾動、填寫表單等操作,使得抓取動態網頁變得可行且高效。

而除了 Selenium,另一個常見且實用的爬蟲工具是 BeautifulSoup4。這個工具適用於處理靜態網頁,它擅長解析 HTML 和 XML 文件,能快速提取所需的資料,對於那些不需要 JavaScript 渲染的網頁, BeautifulSoup4 往往比 Selenium 更快、更輕量。

因此,如果你希望進一步提升自己的技能、並在人工智慧和機器學習領域有所發展,想為 Python 程式語言能力打下堅實的基礎,就推薦你選擇 巨匠電腦 Python 與 AI 人工智慧開發入門 ,藉由為期 66 小時的課程,掌握資料處理、網頁爬蟲,以及機器學習的基本概念與應用!

課程的教學內容包括了解 Python 的應用範圍與生態系統,熟悉 Python 程式語法並加以應用,以及具備使用 Python 進行 資料處理 與網頁爬蟲的技能,甚至如 LineBot 與 ChatGPT 的串接等最新 AI 應用,都有詳細的介紹和實踐。此外,課程還對應了 Microsoft Azure AI Fundamentals(AI-900)證照,為學員的職業發展提供了額外的加分項。

不論你是對 Python 開發有興趣,還是希望進入 AI 領域,巨匠電腦的這門課程都能夠幫助你達成目標。現在就加入巨匠電腦,踏上你的 AI 開發之路吧!
 
近期文章你可能有興趣的文章