Python Selenium:通过web元素循环并与之交互
这可能会让人难以解释,请耐心听我说。 有一个网页有x个“删除”跨距。我已验证这些是页面上唯一的删除跨距。当我尝试循环所有的delete跨距并尝试单击每个跨距时,问题就出现了。以下是我的基本做法: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
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()
当您的脚本单击“删除”时,会发生什么?我怀疑这是一个按钮,因此您可能会被重定向到新页面,或者可能会转到新选项卡或新窗口。