通過 WebElement 控制頁面元素
在使用 Selenium 定位到網頁中的某個元素之后,我們會獲得一個 WebElement 對象,這個對象就像是“遙控器”,可以用來控制這個具體的頁面組件。
通常,我們可以通過它完成三類操作:
- 點擊元素
- 向元素中輸入內容(如在輸入框里鍵入文字)
- 獲取元素的相關信息(比如獲取它顯示的文字、屬性等)
1. 點擊頁面上的元素
要模擬點擊動作,直接調用 WebElement 的 .click()
方法即可。這個動作其實是通過瀏覽器驅動,在頁面中模擬點擊元素的中心位置。
比如,如果我們想點擊“添加客戶”的按鈕:
- 無論是點擊
<button>
元素,還是內部的<span>
,只要點擊點落在按鈕范圍內,都會被視為一次成功點擊。
這就是 Selenium 模擬真實點擊行為的方式——對中心區域執行操作。
2. 向輸入框中輸入文字
輸入文字的方式也很直觀,使用 .send_keys()
方法即可。
如果輸入框中原本就有提示內容或者舊數據,我們可以在輸入前使用 .clear()
方法清空已有文本。
示例:
element = wd.find_element(By.ID, "input1")
element.clear() # 清空舊內容
element.send_keys('白月黑羽') # 輸入新內容
? 適合用于表單填寫、搜索框輸入等自動化交互場景。
3. 獲取元素中的信息
? 獲取文本內容(可見文字)
使用 WebElement 的 .text
屬性,可以獲取某個元素在頁面上可視的文本內容。
element = wd.find_element(By.ID, 'animal')
print(element.text)
不過,.text
獲取的只是用戶界面上看得見的文字。
? 獲取屬性值
如果你想獲取元素的某個 HTML 屬性,比如 class、href、value 等,可以用 .get_attribute()
方法。
element = wd.find_element(By.ID, 'input_name')
print(element.get_attribute('class')) # 獲取 class 屬性值
此外,還可以獲取:
.get_attribute('outerHTML')
:獲取整個 HTML 元素的代碼.get_attribute('innerHTML')
:只獲取元素內部的 HTML 內容
? 獲取輸入框中的值
對于 <input>
等表單輸入控件,如果你想拿到用戶輸入的內容,不能用 .text
,應該用:
element.get_attribute('value')
示例:
element = wd.find_element(By.ID, "input1")
print(element.get_attribute('value')) # 打印輸入框內容
4. 獲取隱藏的或未完全顯示的文本
.text
只能拿到在頁面中實際顯示出來的文字,如果文字被隱藏了(例如用了 display: none
),那就拿不到。
這時,我們可以嘗試更底層的屬性:
element.get_attribute('innerText')
:只獲取可見部分element.get_attribute('textContent')
:包含所有文本(哪怕是隱藏的)
它們的差別在于:
innerText
更貼近用戶界面展示;textContent
更貼近頁面原始結構。
? 補充:get_attribute 與 JavaScript 的關系
如果你了解 HTML 和 JS,你會發現 Selenium 的 .get_attribute()
方法,其實就是通過 JS 去讀取元素的屬性。
例如:
element.get_attribute('value') 等同于 JavaScript 中的 element.value
element.get_attribute('innerText') 等同于 JavaScript 的 element.innerText
5. 關閉瀏覽器窗口
最后,如果你希望在自動化操作完成后關閉瀏覽器窗口,可以調用 WebDriver 的 .quit()
方法:
wd.quit()
這會徹底關閉瀏覽器實例,釋放資源。