You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python-Selenium如何迭代XPath索引获取含指定dojoattachpoint属性的div元素

Python Selenium XPath匹配元素遍历方案

推荐方案:直接获取全量匹配元素遍历

你不需要手动拼接索引,直接使用Selenium提供的复数查找方法一次性拿到所有匹配XPath的元素,再直接遍历列表即可:

  1. 导入元素定位工具(Selenium 4+ 推荐使用By类,旧版本可跳过)
from selenium.webdriver.common.by import By
  1. 获取所有匹配的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']")
  1. 直接遍历元素列表做操作
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:15:02