有没有办法将 find_element_by_xpath 放在 for 循环中?

Is there a way to put find_element_by_xpath inside for loop?

我正在使用 python 和 selenium 来尝试迭代一个循环。

这是我的代码:

rowsArray = driver.find_elements_by_class_name("search-results__result-item")
countRows = (len(rowsArray))

这样我找到 countRows = 25 然后我尝试在 for 循环中迭代:

for i in range(countRows):
   row = driver.find_elements_by_class_name("search-results__result-item")[i]
   print(row)

这种方式效果很好,但由于我需要在具有 'search-results__result-item' class 的元素内获取元素,我尝试在循环内使用 xpath 更改它:

row = driver.find_element_by_xpath(".//li[contains(@class, 'search-results__result-item')][" + str(i) + "]"

row = driver.find_element_by_xpath("//li[@class='search-results__result-item']" + str(i) + "]")

但我得到的只是消息:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //li[@class='search-results__result-item'][0]

使用 XPath 迭代循环的正确方法是什么?

如果我对你的问题理解正确,那么是的,它是 possible.if 你每次都需要访问同一父元素下的子元素,你可以使用以下两个选项。

选项 1:

rowsArray = driver.find_elements_by_class_name("search-results__result-item")
countRows = (len(rowsArray))

for i in range(countRows):
    childelement=rowsArray[i].find_element_by_xpath(".//li[contains(@class, 'search-results__result-item')]")

选项 2:

rowsArray = driver.find_elements_by_class_name("search-results__result-item")

for row in rowsArray:
   childelement=row.find_element_by_xpath(".//li[contains(@class, 'search-results__result-item')]")
//li[@class='search-results__result-item'][0]

线索在这里[0]不代表应该从哪个节点开始[1]

或使用以下代码:

j = 1
for i in range(len(driver.find_elements_by_class_name("search-results__result-item"))):
    row = driver.find_element_by_xpath(f"(.//li[contains(@class, 'search-results__result-item')])[{j}]")
    print(row.text)
    j = j + 1