一、查找單個元素
在Selenium中,可以使用find_element方法查找單個元素。這個方法接收一個元素的定位器作為參數,並返回找到的第一個元素。如果沒有找到匹配的元素,會拋出NoSuchElementException異常。
from selenium import webdriver driver = webdriver.Chrome() # 打開網頁 driver.get('https://www.example.com') # 查找單個元素 element = driver.find_element_by_id('foo')
在上面的代碼中,我們使用find_element_by_id方法查找id為foo的元素。如果頁面中存在這個id為foo的元素,那麼這個元素就會被賦值給變量element。
二、查找多個元素
Selenium還提供了find_elements方法來查找多個元素。這個方法接收一個元素的定位器作為參數,並返回一個列表,其中包含所有匹配的元素。如果沒有找到匹配的元素,會返回一個空列表。
from selenium import webdriver driver = webdriver.Chrome() # 打開網頁 driver.get('https://www.example.com') # 查找多個元素 elements = driver.find_elements_by_tag_name('p')
在上面的例子中,我們使用find_elements_by_tag_name方法查找標籤名為p的所有元素。這些元素會被放到一個列表中,並賦值給變量elements。
三、元素定位器
元素定位器是用來告訴Selenium在哪裡尋找元素的。Selenium提供了一些常用的元素定位器:
- id:用來查找具有特定id的元素。
- name:用來查找具有特定name屬性的元素。
- class_name:用來查找具有特定類名的元素。
- tag_name:用來查找具有特定標籤名的元素。
- link_text:用來查找具有特定鏈接文本的元素。
- partial_link_text:用來查找具有部分鏈接文本的元素。
- xpath:用來查找任何符合XPath語法的元素。
四、元素定位器的組合使用
Selenium允許使用多種元素定位器來定位一個元素。這個能力十分強大,尤其是當元素的定位器可能會發生變化時。比如說,下面的例子中,我們可以通過兩種方式定位一個輸入框:
from selenium import webdriver driver = webdriver.Chrome() # 打開網頁 driver.get('https://www.example.com') # 方法一 element = driver.find_element_by_id('search-form') input_box = element.find_element_by_tag_name('input') # 方法二 input_box = driver.find_element_by_css_selector('#search-form input[type="text"]')
在上面的例子中,我們嘗試使用兩種方法定位一個輸入框。方法一使用了先定位一個父元素,再使用子元素的定位器來定位輸入框的方法。方法二則是直接使用CSS選擇器來定位輸入框。這兩種方法都很實用,取決於你更習慣哪一種寫法。
五、隱式等待
有時候,當我們嘗試查找一個不存在的元素時,find_element方法會等待一段時間(默認是0秒),直到元素出現為止。這個時間被稱為隱式等待時間。
from selenium import webdriver driver = webdriver.Chrome() # 設置隱式等待時間為10秒 driver.implicitly_wait(10) # 打開網頁 driver.get('https://www.example.com') # 查找元素 element = driver.find_element_by_id('foo')
在上面的例子中,我們設置了隱式等待時間為10秒。如果在查找元素時,元素沒有馬上出現,那麼Selenium會等待10秒鐘。如果在10秒鐘內元素出現了,那麼它就可以被找到了,否則會拋出NoSuchElementException異常。
六、顯式等待
有時候,可能需要等待一個元素出現一段時間,直到元素可以被點擊或修改。此時需要使用顯式等待。使用顯式等待時需要指定等待的條件,一旦條件被滿足,Selenium就會繼續執行下一步。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() # 打開網頁 driver.get('https://www.example.com') # 等待元素出現 wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_all_elements_located((By.ID, 'foo'))) # 執行操作 element.click()
在上面的例子中,我們使用了一個顯式等待來等待id為foo的元素出現。當等待條件被滿足時,元素就可以被點擊了。
七、總結
以上就是findelements用法的詳細介紹。掌握好這些方法和知識點,對於自動化測試時通過定位元素來操作網頁會非常有幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/312904.html