Python-Selenium如何迭代XPath索引获取含指定dojoattachpoint属性的div元素
Python Selenium XPath匹配元素遍历方案
推荐方案:直接获取全量匹配元素遍历
你不需要手动拼接索引,直接使用Selenium提供的复数查找方法一次性拿到所有匹配XPath的元素,再直接遍历列表即可:
- 导入元素定位工具(Selenium 4+ 推荐使用
By类,旧版本可跳过)
from selenium.webdriver.common.by import By
- 获取所有匹配的div元素
# Selenium 4+ 写法 title_node_list = driver.find_elements(By.XPATH, "//div[@dojoattachpoint='titleNode']") # Selenium 3及更早版本写法,可直接使用 # title_node_list = driver.find_elements_by_xpath("//div[@dojoattachpoint='titleNode']")
- 直接遍历元素列表做操作
for index, node in enumerate(title_node_list): # index是从0开始的序号,对应XPath写法里的[index+1]位置 print(f"第{index+1}个元素的文本:", node.text) # 其他操作示例:点击、获取属性等 # node.click() # print(node.get_attribute("class"))
特殊场景:需要手动拼接XPath索引的实现
如果确实需要按索引拼接XPath的方式查找,可以先获取匹配元素的总数量,再循环拼接路径:
from selenium.webdriver.common.by import By # 先拿到匹配元素总数 base_xpath = "//div[@dojoattachpoint='titleNode']" total_count = len(driver.find_elements(By.XPATH, base_xpath)) for n in range(1, total_count + 1): # 拼接带索引的XPath,XPath索引从1开始,所以循环范围为1到total_count current_xpath = f"({base_xpath})[{n}]" current_node = driver.find_element(By.XPATH, current_xpath) # 操作元素 print(current_node.text)
注意事项
- 优先使用第一种方案,只需调用一次元素查找接口,性能远高于循环中多次调用查找接口
- 若页面元素是动态加载的,建议在查找元素前添加显式等待,避免拿到空列表或抛出元素不存在异常
- 直接获取的列表索引是从0开始的,和XPath语法里从1开始的索引规则不同,需要对应转换
内容的提问来源于stack exchange,提问作者Hemapriya Viswanath
相关产品推荐
相关产品推荐

