首页 > 解决方案 > 使用 selenium Python 循环访问 webelements

问题描述

我目前正在尝试使用 Selenium 和 python 来自动化一个过程,但我遇到了障碍。该列表是位于树下的列表的一部分。我已经使用以下 xpath 确定了树的基础

item = driver.find_element_by_xpath("//*[@id='filter']/ul/li[1]//ul//li")

items = item.find_elements_by_tag_name("li")

我正在尝试遍历“项目”部分,但需要并单击带有“输入”标签的任何内容

for k in items: WebDriverWait(driver, 10).until(EC.element_to_be_clickable((k.find_element(By.TAG_NAME, "input")))).click()

执行上述操作时,出现以下错误:“TypeError: find_element() argument after * must be an iterable, not WebElement”

出于某种原因,如果我使用类似下面的内容,.click() 将不起作用。 k.find_element_by_tag_name("input").click() 只有当我使用 webdriverwait 时它才有效。每当我需要单击页面上的某些内容时,我都不得不使用网络驱动程序等待方法。

我的问题是:要复制的语法是什么items = item.find_elements_by_tag_name("li")WebDriverWait(driver, 10).until(EC.element_to_be_clickable((k.find_element(By.TAG_NAME, "input")))).click() 即如何使用基本路径并使用私有方法附加到find_elements(By.TAG_NAME)

提前致谢

标签: pythonseleniumselenium-webdriverselenium-chromedriver

解决方案


我已经设法找到解决方法并让 Selenium 做我需要的事情。我不得不调用 javascript 执行,所以我没有尝试开始 WebDriverWait(driver, 10).until(EC.element_to_be_clickable((k.find_element(By.TAG_NAME, "input")))).click() 工作,而是使用了 driver.execute_script("arguments[0].click();", k.find_element_by_tag_name("input"))

它正在做我需要它做的事情。


推荐阅读