首页 > 解决方案 > 找到 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 被应用于整个页面。

标签: python-3.xselenium-webdriverxpath

解决方案


除了安德森指出的方式之外,解决这个问题的另一种方法如下:

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 放在括号中并使用索引对其进行迭代来输入绝对路径。


推荐阅读