Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium:通过web元素循环并与之交互_Python_Selenium - Fatal编程技术网

Python Selenium:通过web元素循环并与之交互

Python Selenium:通过web元素循环并与之交互,python,selenium,Python,Selenium,这可能会让人难以解释,请耐心听我说。 有一个网页有x个“删除”跨距。我已验证这些是页面上唯一的删除跨距。当我尝试循环所有的delete跨距并尝试单击每个跨距时,问题就出现了。以下是我的基本做法: deletes = driver.find_elements_by_xpath("//span[.='delete']") for delete in deletes: delete.click() 现在,这将对第一个有效,但对所有超过此的无效。我想知道如何使用这句话: wait.until

这可能会让人难以解释,请耐心听我说。 有一个网页有x个“删除”跨距。我已验证这些是页面上唯一的删除跨距。当我尝试循环所有的delete跨距并尝试单击每个跨距时,问题就出现了。以下是我的基本做法:

deletes = driver.find_elements_by_xpath("//span[.='delete']")
for delete in deletes:
    delete.click()
现在,这将对第一个有效,但对所有超过此的无效。我想知道如何使用这句话:

 wait.until(EC.element_to_be_clickable([find delete element]))

等待它再次加载,因为抛出了一个过时的元素引用异常

内部循环等待第一个元素可用。i、 e

wait.until(EC.element_to_be_clickable([xpath for first delete]))
第一次删除的xpath应该是
(“//span[.='delete'][1]”

或者,您可以在每次删除操作后刷新页面。
下一个选项是使用try-and-catch块。

有很多方法可以解决这个问题。您可以像这样使用Do-While循环来计算元素的数量,然后等待它,然后单击它

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

...
...
while True:
    counter = len(driver.find_elements_by_xpath("//span[.='delete']"))
    if counter==0:
      break

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable("//span[.='delete']"))
    driver.find_elements_by_xpath("//span[.='delete']").click()

当您的脚本单击“删除”时,会发生什么?我怀疑这是一个按钮,因此您可能会被重定向到新页面,或者可能会转到新选项卡或新窗口。