1. 查找元素的基礎
查找元素的方法
在開始撰寫程式碼之前,很重要的是要理解,我們可以如何透過 Selenium 查找網頁上的元素。 Selenium 提供了幾種方便的查找元素的方法:
-
find_element_by_id()
: 根據元素的唯一 ID 查找。 -
find_element_by_name()
: 根據屬性name
查找元素。 -
find_element_by_class_name()
: 查找具有特定 class 的元素。 -
find_element_by_tag_name()
: 根據 tag 名稱查找元素,例如div
,p
,a
。
我們從簡單的例子開始 — 通過 id
查找元素。比如,我們丟失了一個按鈕,上面寫著“魔法按鈕”,現在我們需要找到它:
from selenium import webdriver
# 設置 Driver 並打開瀏覽器
driver = webdriver.Chrome()
driver.get('https://example.com')
# 根據 id 查找元素
magic_button = driver.find_element_by_id('magic_button_id')
# 操作找到的元素(例如提取文本)
print(magic_button.text)
# 結束 session
driver.quit()
處理找到的元素
找到元素後,是時候決定該做些什麼了。發揮創意,使用 Selenium 提供的方法,比如 text
來獲取元素的文本內容,或者 get_attribute('attribute_name')
來提取元素的屬性值。
假設我們的元素是一個鏈接,我們想知道它的跳轉目標。方法如下:
# 查找鏈接元素
link_element = driver.find_element_by_class_name('link_class')
# 從屬性 href 中提取 URL
link_url = link_element.get_attribute('href')
print(f'這個鏈接的目標是:{link_url}')
2. 方法 find_element_by_id()
方法 find_element_by_id()
是查找網頁元素最快最可靠的方式之一。
它允許根據元素的唯一屬性 id
來查找元素。在 HTML 中,屬性 id
是唯一的識別符號,因此可保證方法返回所需的單一元素。
使用範例:
element = driver.find_element_by_id("submit-button")
在此範例中,Selenium 查找具有 id="submit-button"
的元素,並將其保存到變數 element
中。
這種方式適用於查找按鈕、表單、輸入框等稀有的唯一元素。
什麼時候使用?
只要元素有唯一的 id
,即可推薦使用 find_element_by_id()
方法,因為它提供了快速且精確的訪問。
2. 方法 find_element_by_name()
方法 find_element_by_name()
是通過屬性 name
查找元素。
它經常被用於表單和輸入框,特別是當元素可能有相同的 class 或 id
,但有不同的 name
。與 id
不同,name
的屬性不一定是唯一的,因此在頁面上可能會有多個具有相同 name
的元素。
使用範例:
element = driver.find_element_by_name("username")
此程式碼會查找屬性為 name="username"
的元素。通常這是登錄表單中的用戶名輸入框。
什麼時候使用?
這個方法適用於當元素沒有唯一 id
,但有 name
屬性時。它在表單輸入中非常有效,因為這些元素通常依賴 name
進行識別。
3. 方法 find_element_by_class_name()
方法 find_element_by_class_name()
是通過其 class (class
) 查找元素。
它可與 CSS 配合使用,幫助找到具有相同樣式設計的元素。不過要注意,class
可被分配給多個元素,因此如果需要找到特定元素,最好確認唯一的 class,或者使用其他方法。
使用範例:
element = driver.find_element_by_class_name("main-header")
在此範例中,Selenium 會查找第一個具有 class main-header
的元素。
什麼時候使用?
find_element_by_class_name()
經常被用於查找標題、按鈕或其他有樣式的元素。
當元素沒有唯一的 id
或 name
,而你需要根據樣式來查找時,這個方法非常有用。
4. 方法 find_element_by_tag_name()
方法 find_element_by_tag_name()
是根據元素的標籤名查找元素,例如 div
, p
, a
, input
。
對於需要獲取同類型的所有元素,尤其是頁面結構清晰的情況下,這個方法非常有幫助。
使用範例:
element = driver.find_element_by_tag_name("h1")
這裡 Selenium 將查找第一個標籤為 h1
的元素,通常這是頁面上的主要標題。
什麼時候使用?
方法 find_element_by_tag_name()
適用於查找標題、圖片、段落或其他用特定標籤表示的元素。
但是需要注意,一個頁面中同類型的標籤可能會很多,因此這個方法並不總是能精確指出某個特定元素。
5. 特點與錯誤
在繼續前,讓我們停下來讚歎一下 HTML 的多樣性。有時,像按鈕或圖片這樣的元素可能沒有唯一的 id 或 class。 這種情況下,我們需要更複雜的查找方式,比如 XPath 和 CSS 選擇器,我們會在下一堂課中講到。但如果你現在就遇到這樣的元素,不要慌,這只是自動化世界中的一部分樂趣。
選擇器的脆弱性
在使用屬性(如 id
和 class
)時,請注意它們可能會改變。
選擇器依賴於突然改變的 id
可能會導致錯誤。特別是對於動態生成的頁面,標識符可能是隨機的。
解決方法?使用更穩定的屬性或者結合不同的方法。
6. 實際應用
現在我們已經知道如何通過 id
、class 和名稱來查找元素。
此知識的用途非常廣泛,尤其是在自動化網頁交互時。成功找到的元素可以用來填寫表單、按下按鈕,或提取信息——這些操作大大加速了你的工作,並減輕了單調的任務。
想像一下,一家公司中,每個員工每天都要花 10 分鐘填寫同樣的表單。 這時 Selenium 就派上用場了:它能在幾分鐘內處理完所有的重複工作,而你卻可以悠閒地享用早晨的咖啡。
對於那些對真實案例感興趣的人來說,Selenium 的自動化功能被用於測試網頁應用程式、監控網站變化,甚至可以在你最愛的社交網站上找回忘記的密碼(假如那些演算法突然決定你在熊貓照片裡不是你自己)。
GO TO FULL VERSION