这可能难以解释,请耐心等待。 有一个网页,其中“删除”跨度为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]))
等待它再次加载,因为抛出了陈旧的元素引用异常。
答案 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()