如何使用selenium和python创建具有相同xpath的元素列表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用selenium和python创建具有相同xpath的元素列表?相关的知识,希望对你有一定的参考价值。

我需要在同一个网页上点击同一个表格中的几个元素。我想用for循环这样做但是为了执行该操作我首先需要创建这些元素的列表。

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

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

答案

虽然@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每个元素: 有3个不同的阶段存在,可见性和可互动性(即可点击性) 要收集List中的元素,您应该始终调用具有预期条件的服务员visibility_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()
另一答案

使用find_elements而不是find_element:

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

以上是关于如何使用selenium和python创建具有相同xpath的元素列表?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Selenium 和 Robot Framework 遍历 Web 元素

如何使用 Selenium 和 Python 选择具有 unselectable="on" 属性的剑道下拉元素

如果两个类具有相同的类名,如何引用第二个类名 - 使用 selenium webdriver

如何使用 Python 和 Selenium 在 Chrome 中打开具有不同 URL 的新标签页? [复制]

如何使用来自具有特殊设置的网站的Selenium从下拉列表中选择值 - Python

如何解决python selenium刷新所有标签的问题?