CodeGym /Adesua ahorow /Python SELF TW /透過 HTML 屬性查找元素:id, class

透過 HTML 屬性查找元素:id, class

Python SELF TW
等級 35 , 課堂 3
開放

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 查找元素。比如,我們丟失了一個按鈕,上面寫著“魔法按鈕”,現在我們需要找到它:

Python

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') 來提取元素的屬性值。

假設我們的元素是一個鏈接,我們想知道它的跳轉目標。方法如下:

Python

# 查找鏈接元素
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 是唯一的識別符號,因此可保證方法返回所需的單一元素。

使用範例:

Python

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 的元素。

使用範例:

Python

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,或者使用其他方法。

使用範例:

Python

element = driver.find_element_by_class_name("main-header")

在此範例中,Selenium 會查找第一個具有 class main-header 的元素。

什麼時候使用?

find_element_by_class_name() 經常被用於查找標題、按鈕或其他有樣式的元素。 當元素沒有唯一的 idname,而你需要根據樣式來查找時,這個方法非常有用。

4. 方法 find_element_by_tag_name()

方法 find_element_by_tag_name() 是根據元素的標籤名查找元素,例如 div, p, a, input。 對於需要獲取同類型的所有元素,尤其是頁面結構清晰的情況下,這個方法非常有幫助。

使用範例:

Python

element = driver.find_element_by_tag_name("h1")

這裡 Selenium 將查找第一個標籤為 h1 的元素,通常這是頁面上的主要標題。

什麼時候使用?

方法 find_element_by_tag_name() 適用於查找標題、圖片、段落或其他用特定標籤表示的元素。 但是需要注意,一個頁面中同類型的標籤可能會很多,因此這個方法並不總是能精確指出某個特定元素。

5. 特點與錯誤

在繼續前,讓我們停下來讚歎一下 HTML 的多樣性。有時,像按鈕或圖片這樣的元素可能沒有唯一的 id 或 class。 這種情況下,我們需要更複雜的查找方式,比如 XPath 和 CSS 選擇器,我們會在下一堂課中講到。但如果你現在就遇到這樣的元素,不要慌,這只是自動化世界中的一部分樂趣。

選擇器的脆弱性

在使用屬性(如 idclass)時,請注意它們可能會改變。 選擇器依賴於突然改變的 id 可能會導致錯誤。特別是對於動態生成的頁面,標識符可能是隨機的。 解決方法?使用更穩定的屬性或者結合不同的方法。

6. 實際應用

現在我們已經知道如何通過 id、class 和名稱來查找元素。 此知識的用途非常廣泛,尤其是在自動化網頁交互時。成功找到的元素可以用來填寫表單、按下按鈕,或提取信息——這些操作大大加速了你的工作,並減輕了單調的任務。

想像一下,一家公司中,每個員工每天都要花 10 分鐘填寫同樣的表單。 這時 Selenium 就派上用場了:它能在幾分鐘內處理完所有的重複工作,而你卻可以悠閒地享用早晨的咖啡。

對於那些對真實案例感興趣的人來說,Selenium 的自動化功能被用於測試網頁應用程式、監控網站變化,甚至可以在你最愛的社交網站上找回忘記的密碼(假如那些演算法突然決定你在熊貓照片裡不是你自己)。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION