Selenium-Python-IE 11 中 "Element no longer valid" 的问题

Problem with "Element no longer valid" in Selenium-Python-IE 11

加载网页时,我必须单击超链接。此单击有时有效,有时无效。当此点击不起作用时,我收到此问题:

selenium.common.exceptions.StaleElementReferenceException: Message: Element is no longer valid

这是最常见的问题。

还有一次,执行错误javascript,IE 驱动程序的命令行已停止工作(关闭程序)

这是我必须点击的 html 代码

<div class="body">
    <div id="sidebar">
    <ul class="nav nav-list">
        <li class="nav-header">
            PAGOS
        </li>
        <li>
            <a tabindex="-1" href="../../inputNewOutgoing">
                 <span>Crear Pago Saliente</span> 
            </a>
        </li>
...

这是我的 python 代码:

WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.LINK_TEXT,'Crear Pago Saliente'))).click();

另外,我试过这个:

WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='sidebar']/ul/li[2]/a/span"))).click()

这有什么问题吗?我必须添加更多等待或尝试其他类型的等待?

陈旧元素引用异常是由于您的元素未附加到 DOM 引起的。 很多时候等待可以解决这个问题,但最好的解决办法是重新初始化catch块中的元素

try:
    element = driver.find_element(By.XPATH, '//*[@id='sidebar']/ul/li[2]/a/span')
    element.click()
except StaleElementReferenceException as error:
    print(error)
    print('The stale element reference occurred')
    element = driver.find_element(By.XPATH, '//*[@id='sidebar']/ul/li[2]/a/span')
    element.click()

我用这段代码解决了这个问题:

try:
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='sidebar']/ul/li[2]/a/span"))).click()
except StaleElementReferenceException as Exception:
    print('StaleElementReferenceException while trying to click the hyperlink, trying to click again')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='sidebar']/ul/li[2]/a/span"))).click()