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

问题描述 投票:2回答:2

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

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

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

python list selenium selenium-webdriver xpath
2个回答
1
投票

虽然@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()

3
投票

使用find_elements而不是find_element:

links = driver.find_elements_by_xpath("//table[@border='1']//a")
for values in links:
    values.click()
© www.soinside.com 2019 - 2024. All rights reserved.