当网页加载时,我必须点击一个超链接。这个点击有时有效,有时无效。当这个点击不起作用时,我就会收到这个问题。
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()
这有什么问题吗?我必须添加更多的等待或者尝试其他类型的等待?
Stale Element Reference Exception是由于你的元素没有连接到DOM上而引起的。重新初始化抓取块中的元素。.
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()