Python Selenium:遍历网络元素并与之交互

时间:2018-07-15 01:36:05

标签: python selenium

这可能难以解释,请耐心等待。 有一个网页,其中“删除”跨度为x。我已验证这是页面上唯一的删除范围。当我尝试遍历所有删除范围并尝试单击每个范围时,就会出现问题。基本上,这就是我的操作方式:

deletes = driver.find_elements_by_xpath("//span[.='delete']")
for delete in deletes:
    delete.click()

现在这将对第一个有效,但对所有之后的所有失败。我想知道如何使用此语句:

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

等待它再次加载,因为抛出了陈旧的元素引用异常。

2 个答案:

答案 0 :(得分:0)

内部循环等待第一个元素可用。即

wait.until(EC.element_to_be_clickable([xpath for first delete]))

首次删除的xpath应该为("//span[.='delete'][1]"

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

答案 1 :(得分:0)

有很多解决方法。您可以像这样使用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()