Skip to content

建立 2026-09-15 更新 2026-09-15

定位網頁元素

要操作網頁上的按鈕、輸入框或連結,第一步永遠是先「找到」它。Selenium 把找元素的方式統稱為定位器(Locator),並提供 find_elementfind_elements 兩個方法搭配使用。

常用定位策略

所有定位方法都透過 By 類別指定,語法固定為 driver.find_element(By.策略, "值")

策略 說明 範例
By.ID 依元素的 id 屬性查找,最快也最穩定 By.ID, "username"
By.NAME name 屬性查找,常用於表單欄位 By.NAME, "email"
By.CLASS_NAME 依 CSS class 查找 By.CLASS_NAME, "btn-primary"
By.TAG_NAME 依 HTML 標籤查找 By.TAG_NAME, "h1"
By.LINK_TEXT <a> 連結的完整文字查找 By.LINK_TEXT, "登入"
By.PARTIAL_LINK_TEXT 依連結文字的部分內容查找 By.PARTIAL_LINK_TEXT, "登"
By.CSS_SELECTOR 使用 CSS 選擇器,彈性最高、最常用 By.CSS_SELECTOR, "#id .class"
By.XPATH 使用 XPath 表達式,可依文字內容、父子關係查找 By.XPATH, "//tag[@attribute='value']"
from selenium.webdriver.common.by import By

element = driver.find_element(By.ID, "element_id")
element = driver.find_element(By.NAME, "element_name")
element = driver.find_element(By.CSS_SELECTOR, ".class_name")
element = driver.find_element(By.XPATH, "//tag[@attribute='value']")

實務上優先使用 By.ID(若元素有穩定的 id),其次是 By.CSS_SELECTORBy.XPATH 彈性最高,但語法較長、也比較容易因為頁面結構調整而失效,建議在前兩者都無法定位時再使用。

find_element v.s. find_elements

find_element

  • 回傳值:第一個符合條件的單一元素;找不到時會拋出 NoSuchElementException
  • 使用時機:確定頁面上只有一個目標元素時使用(例如一個特定按鈕)。
element = driver.find_element(By.ID, "element_id")

find_elements

  • 回傳值:所有符合條件的元素組成的列表(list);找不到時回傳空列表 [],不會拋出例外。
  • 使用時機:需要處理多個元素(例如一組選項、一批商品卡片)時使用。
elements = driver.find_elements(By.CLASS_NAME, "class_name")

即使只找到一個元素,find_elements 仍然會以列表形式回傳,這點與 find_element 直接回傳單一元素不同。

該選哪一個?

  • 確定畫面上只有一個符合條件的元素、且不存在時應視為錯誤 → 用 find_element
  • 元素可能有多個,或需要先判斷「元素存不存在」而不想讓程式直接拋出例外 → 用 find_elements,再檢查回傳的列表長度。
elements = driver.find_elements(By.ID, "element_id")
if elements:
    print("元素存在")
else:
    print("元素不存在")

相關資料

找到元素之後,接著可以進一步學習如何操作元素與控制瀏覽器