【问题标题】:Is there a way to put find_element_by_xpath inside for loop?有没有办法将 find_element_by_xpath 放在 for 循环中?
【发布时间】:2022-01-25 16:22:52
【问题描述】:

我正在使用带有 selenium 的 python 来尝试迭代循环。

这是我的代码:

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”类的元素中获取元素,因此我尝试在循环中使用 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 迭代循环的正确方法是什么?

【问题讨论】:

  • 你能分享你正在处理的页面的链接和更多你的代码吗?目前还不够清楚你试图在哪些元素等中访问哪些元素。
  • 我可以 (linkedin.com/sales/search/saved-searches/company),但它是内部销售导航器,所以我认为您无法访问。
  • 事实上这些项目是存在的,因为我可以使用 find_elements_by_class_name 找到它们。使用 xpath 执行相同循环的正确方法是什么?

标签: python selenium for-loop


【解决方案1】:
//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

【讨论】:

    【解决方案2】:

    如果我正确理解了您的问题,那么是有可能的。如果您每次都需要访问同一父级下的子元素,则可以使用以下两个选项。

    选项 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')]")
    

    【讨论】:

    • 同样的错误:selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .//li[contains(@class, 'search-results__result-item')] 我想访问项目每次我在循环中迭代时都有索引“i”
    • @HugoAroeira :请使用显式等待或time.sleep(5) 提供一些延迟,让我知道这是怎么回事?
    • @HugoAroeira : 你能在你的原始帖子中添加相关的 HTML 吗?
    猜你喜欢
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2018-03-19
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多