【问题标题】:How can I create a list of elements with the same xpath using selenium with python?如何使用 selenium 和 python 创建具有相同 xpath 的元素列表?
【发布时间】:2018-07-10 09:01:07
【问题描述】:

我需要点击同一个网页上同一个表格中的几个元素。我正在考虑使用 for 循环来执行此操作,但为了执行该操作,我首先需要创建这些元素的列表。

//table[@border='1']//a

这是从表中选择所有元素的 xpath,我如何创建所有这些元素的列表?

【问题讨论】:

  • 只需使用find_elements_by_xpath() 而不是find_element_by_xpath()
  • @Andersson 我正在使用这行代码来查找所有元素: WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//table[@border=' 1']//a']"))).click() 通过将 XPATH 更改为 XPATHS,您的方法是否有效?那么我怎样才能把所有的元素放在一个列表中呢?
  • 在这种情况下,您需要将EC.element_to_be_clickable 替换为EC.visibility_of_all_elements_located。同时删除.click()
  • @Andersson 我怎样才能把元素放在一个列表中?我试过简单地将方法设置为一个变量,但它不起作用,我认为错误来自方法

标签: python list selenium selenium-webdriver xpath


【解决方案1】:

使用 find_elements 代替 find_element:

links = driver.find_elements_by_xpath("//table[@border='1']//a")
for values in links:
    values.click()

【讨论】:

  • 谢谢,您介意看看问题下的 cmets 并尝试使代码适应该方法吗?
【解决方案2】:

虽然@SergiyKonoplyaniy 的答案方向正确,但会一一解决您的疑问:

  • 如何创建具有相同 xpath 的元素列表:要创建 元素列表,您需要使用 find_elements_by_xpath(xpath),这将创建一个列表 与您指定的 xpath 匹配的元素。

  • 例子:

    my_links = driver.find_elements_by_xpath("//table[@border='1']//a")
    
  • 需要点击几个元素:因为你需要click() 在几个元素上,你必须遍历你在List中捕获的所有元素,如下所示:

    for link in my_links:
        link.click()
    
  • 现在最重要的方面是,根据您的 xpath //table[@border='1']//a 每个元素:

    • 存在可见性交互性(即可点击性)三个不同的阶段
    • 要收集 List 中的元素,您应该始终调用具有 expected-conditionsvisibility_of_all_elements_located(locator) 的服务员,如下所示:

      my_list = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_all_elements_located((By.XPATH, "//table[@border='1']//a")))
      
    • 作为您问题解决方案的伪代码将是:

      my_links = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_all_elements_located((By.XPATH, "//table[@border='1']//a")))
      for link in my_links:
          link.click()
      
    • 为了您将来的参考,如果您打算在任何特定元素上调用click(),请始终调用具有预期条件的服务员作为element_to_be_clickable(locator),如下所示:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "desired_element_xpath"))).click()
      

【讨论】:

  • 谢谢,尽管我们已经在原始问题下的 cmets 中解决了这个问题,但还是很累人!如果您想进一步提供帮助,可以尝试修改对我的其他问题的回答:)
  • 我不知道您为什么在这里感到筋疲力尽,也许我已经根据建议的代码行、方法和功能向您指出了所有必需的文档。如果您需要更多帮助,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2011-04-19
  • 2020-07-31
  • 2015-09-17
相关资源
最近更新 更多