python-3.x - 找到 WebDriver 元素后,如何在该元素上应用 xpath 以进一步缩小范围?
问题描述
情况如下:
我的 HTML 代码结构如下所示:
XPATH1
XPATH1 + XPATH2
XPATH1 + XPATH3
XPATH1
XPATH1 + XPATH2
XPATH1 + XPATH3
我需要访问这些子路径。所以我试图首先将所有 XPATH1 放入一个列表中,然后尝试对其进行迭代。
不幸的是,这对我来说是重复的。
我在 Python 中有以下代码:
elements_list = driver.find_elements_by_xpath(XPATH1)
for element in element_list:
var1 = element.find_element_by_xpath(XPATH2) #We need XPATH1/XPATH2
var2 = element.find_element_by_xpath(XPATH3)
#lots more sub-paths
我怀疑正在发生的事情是 element.find_element_by_xpath(XPATH2)不适用于元素的 XPATH。相反,它在页面上普遍应用它并获取 XPATH2 的整个列表。
我也不能使用 XPATH1 + XPATH2 因为那样它仍然会指向每个元素。
如何使用 for 循环访问此页面上的每个元素?
另外,有没有使用element.find_element_by_xpath 函数?它似乎几乎没有用,因为 xpath 被应用于整个页面。
解决方案
除了安德森指出的方式之外,解决这个问题的另一种方法如下:
total_count = len(driver.find_elements_by_xpath(XPATH1))
for i in range(1,total_count+1):
var1 = element.find_element_by_xpath("("+ XPATH1 + ")[{0}]".format(i) + XPATH2)
var2 = element.find_element_by_xpath("("+ XPATH1 + ")[{0}]".format(i) + XPATH3)
基本上,我们通过将 XPATH1 放在括号中并使用索引对其进行迭代来输入绝对路径。
推荐阅读
- swiftui - SwiftUI 可选文本字段
- android - 如何识别库中不兼容的类?
- python - 尝试遍历一系列日期但获取对象不可调用
- python - 注销后如何使用 SSH 重新登录?
- elasticsearch - 未应用自定义索引模板
- jpa - jpa事务和jdbc事务可以使用同一个数据源吗
- swift - 从关闭中抛出错误
- javascript - jQuery on click 不能与 express 一起加载车把页面
- android - 为什么 mediaplayer.prepareAsync() 会抛出 IllegalStateException?
- google-maps - Xamarin Forms Google Maps (Custom Renderer based on
) 没有 POI onclick 方法?