CodeGym /Adesua ahorow /Python SELF TW /創建函數以搜尋和操作網頁上的元素

創建函數以搜尋和操作網頁上的元素

Python SELF TW
等級 37 , 課堂 2
開放

1. 頁面元素搜尋基礎

使用方法來搜尋元素

當你準備在實際項目中使用 Selenium 時,第一個任務通常就是搜尋頁面上的元素。可以想像成在飯店裡找電梯按鈕一樣:你需要知道它在哪裡,才能按下去到需要的樓層。

Selenium 提供了幾個方法來搜尋元素。根據你的喜好,你可以使用 find_element_by_idfind_element_by_namefind_element_by_xpathfind_element_by_css_selector,等等。 讓我們一起回顧一下並寫個簡單的例子:

Python

from selenium import webdriver

# 創建瀏覽器的實例 (這裡使用 Chrome)
driver = webdriver.Chrome()

# 開啟頁面
driver.get('http://example.com')

# 根據 ID 搜尋元素
element_by_id = driver.find_element_by_id('main')

# 根據名字搜尋元素
element_by_name = driver.find_element_by_name('username')

# 根據 XPath 搜尋元素
element_by_xpath = driver.find_element_by_xpath('//div[@class="content"]')

# 根據 CSS 選擇器搜尋元素
element_by_css = driver.find_element_by_css_selector('div.content')

find_element 與 find_elements 之間的區別

如果你想獲取多個元素(例如擁有 btn 類的所有按鈕),你需要用到 find_elements 方法。find_elementfind_elements 的區別在於,前者返回一個單一元素,而後者返回的是元素的列表。

Python

# 搜尋單一元素
single_element = driver.find_element_by_class_name('btn')

# 搜尋多個元素
multiple_elements = driver.find_elements_by_class_name('btn')

# 遍歷找到的元素
for element in multiple_elements:
    print(element.text)

如你所見,find_elements 非常適合處理頁面上可能存在多個的元素集合。每個 find_element_xxx 方法都有一個對應的 find_elements_xxx,返回的是元素列表。

2. 與元素的互動

與按鈕、鏈接和輸入框互動

現在,你已經回憶起如何尋找元素,是時候記住如何與它們互動!這有點像玩 LEGO:需要正確地組裝元素,以實現你的需求。

可以通過 Selenium 提供的方法來與元素互動。讓我們再次檢查怎麼做:

Python

# 點擊按鈕
button = driver.find_element_by_id('submit')
button.click()

# 在輸入框中輸入文字
input_field = driver.find_element_by_name('q')
input_field.send_keys('Python selenium tutorial')

# 獲取元素的文字
header = driver.find_element_by_tag_name('h1')
print(header.text)

處理事件和動態元素操作

當涉及到操作動態元素,例如只有在某些操作後才會出現的按鈕時, 考慮延遲和等待是很重要的。Selenium 提供了等待這些元素加載的方法。 其中之一是使用 WebDriverWait 配合 expected_conditions

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待按鈕出現最多 10 秒
button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'submit'))
)

button.click()

提示: 為了避免每次都寫 expected_conditions,我們在導入時將其重命名為 EC

使用等待可以讓你的腳本更加穩健,不會因為短暫的延遲或頁面加載速度過慢而崩潰。實際項目中,這種情況發生得非常頻繁——幾乎一直都有 :)

3. 可能出現的問題

什麼都有可能出問題。 當你對與元素互動充滿期待時,突然,砰——某些事情出錯了。讓我們來討論一些你可能遇到的典型錯誤。

首先是 NoSuchElementException——這是一個錯誤消息,當你尋找的元素不存在於頁面上時,它會經常出現。這通常是因為你試圖查找一個不存在的元素。為了防止這種情況,你可以使用 try-except 方法來處理異常。

Python

from selenium.common.exceptions import NoSuchElementException

try:
    element = driver.find_element_by_id('non_existent_id')
except NoSuchElementException:
    print("哎呀,看起來這個元素沒有找到!")

同時還可能遇到與動態元素和加載時間相關的問題。在這種情況下,可以使用我們之前提到的 WebDriverWait 等待元素加載完成。

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