Selenium 查找页面元素的方式
Selenium 查找页面元素的方式
Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式:
基本定位方式
-
通过ID定位
driver.find_element(By.ID, "element_id")
-
通过Name定位
driver.find_element(By.NAME, "element_name")
-
通过Class Name定位
driver.find_element(By.CLASS_NAME, "class_name")
-
通过Tag Name定位
driver.find_element(By.TAG_NAME, "tag_name")
-
通过Link Text定位(精确匹配)
driver.find_element(By.LINK_TEXT, "链接文本")
-
通过Partial Link Text定位(部分匹配)
driver.find_element(By.PARTIAL_LINK_TEXT, "部分链接文本")
CSS 选择器定位
driver.find_element(By.CSS_SELECTOR, "css_selector")
示例:
"#id"
- 通过ID".class"
- 通过类名"div > input"
- 子元素"input[type='text']"
- 属性选择器
XPath 定位
driver.find_element(By.XPATH, "xpath_expression")
示例:
"//input"
- 所有input元素"//div[@id='main']"
- 特定属性的div"//a[contains(text(),'登录')]"
- 包含特定文本的链接
查找多个元素
使用find_elements
(注意复数形式)返回匹配的所有元素列表:
elements = driver.find_elements(By.CSS_SELECTOR, ".list-item")
相对定位(Selenium 4新增)
Selenium 4 引入了相对定位器:
from selenium.webdriver.support.relative_locator import locate_withpassword = driver.find_element(By.ID, "password")
email = driver.find_element(locate_with(By.TAG_NAME, "input").above(password))
相对定位方法包括:above()
, below()
, to_left_of()
, to_right_of()
, near()
最佳实践
- 优先使用ID定位,因为ID通常是唯一的且效率最高
- 当ID不可用时,考虑使用CSS选择器
- XPath功能强大但执行较慢,应谨慎使用
- 对于动态元素,考虑使用显式等待结合定位策略
示例代码
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 ECdriver = webdriver.Chrome()
driver.get("https://example.com")# 使用显式等待定位元素
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "dynamic-element"))
)# 使用CSS选择器
submit_button = driver.find_element(By.CSS_SELECTOR, "button.submit-btn")# 使用XPath
link = driver.find_element(By.XPATH, "//a[contains(@href, 'logout')]")
记得在使用完WebDriver后调用driver.quit()
来关闭浏览器和释放资源。
支付宝这一次力度够大的啊,后台看到有人居然领了 20 元,你也来试试