一、查找单个元素
在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/n/312904.html