当前位置: 首页 > 知识库问答 >
问题:

硒功能点击前检查新鲜度,避免陈腐元素异常“重复”

夏侯兴学
2023-03-14

我正在从一个使用jquery的站点中抓取数据,有时我会遇到Stale元素异常,我通过在try/except之间引入sleep来修复这个异常。

WebDriverWait(driver, 10).until(EC.staleness_of(driver.find_element_by_link_text("2020:")))

测试代码:我试图在其中替换sleep()

from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.implicitly_wait(15)
driver.get('https://vahan.parivahan.gov.in/vahan4dashboard/')

driver.find_element_by_xpath('//*[@id="j_idt45"]').click() # Click Refresh

try:
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT,'2020:'))).click()
except Exception as e:
    print("Exception occoured!", e)
    sleep(5) # <============ Tying to replace this ============<
    try:
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT,'2020:'))).click()
    except:
        input("Year selection failed")
sleep(2) # <============ Tying to replace this ============<

text_string = driver.find_element_by_xpath('//*[@id="t3"]/div').text

共有1个答案

穆洋
2023-03-14

我不是一个原生的python开发人员,但是,我在C#中处理这个问题的方式是:-

public static void StaleEnterTextExceptionHandler(this IWebDriver driver, By element, string value)
        {
            try
            {
                driver.EnterText(element, value);
            }
            catch (Exception e)
            {
                if (e.GetBaseException().Equals(typeof(StaleElementReferenceException)))
                {
                    StaleEnterTextExceptionHandler(driver, element, value);
                }
                else
                throw e;
            }
        }

逻辑是简单地递归调用方法,除非过时的异常不存在。

 类似资料:
  • 我正在使用selenium测试脚本。我得到以下错误和这个错误随机发生。当我跑10次时,我会得到大约两次。所以它不是真的可复制的。有人知道为什么会这样吗?我试图单击的元素在浏览器中绝对可见,并且不会四处移动,因此不需要调整大小或拖动元素。我正在使用chrome webdriver,我阅读了其他故障排除策略(调试“Element is not clickable at point”错误),它们似乎与我

  • 我最近将selenium升级到最新版本(2.53),将firefox升级到最新版(45.0.1)。 我在相同的网站上运行相同的代码,但我突然有很多这样的例外: Web 驱动程序异常: 消息: 元素在点 (312, 8.816665649414062) 不可单击。其他元素将收到单击: 例如: 有什么我应该注意的新东西吗?我之前的python selenium版本相当旧,而且我在Firefox 38上

  • 我目前正在处理一个自动填写表格的项目。当表单填写时,下一个按钮会出现,这就是为什么它给我一个错误。 我试过: HTML: 错误: selenium.common.exceptions.ElementClickInterceptedException:消息:元素点击被拦截:元素在点(203,530)不可点击。其他元素将收到点击:...(会话信息:chrome=76.0.3809.132)

  • 我用selenium和python一起使用,我试图点击一个按钮,但它似乎不起作用。下面是html结构的图片: 这里 我已经尝试通过xpath和类单击该按钮,但没有成功。它也没有给我一个错误。我为每一个答案感到高兴!

  • 用我在selenium的初学者知识,我试图找到点击元素,打开链接。这些项目的链接没有href。我如何执行点击正确的元素打开链接。 我正在使用python、selenium、chrome web驱动程序、BeautifulSoup。所有库都已更新。 下面是示例html片段,其中有一个我需要使用selenium点击的标题。请让我知道,如果你需要更多的html源。此代码来自仅限“登录”的网站。

  • 我正在尝试自动“Tableau”登录屏幕和下载报告流程。在我到达“下载”按钮之前一切正常。第一个问题是我无法右键单击下载按钮并在Chrome进行“检查”,这很奇怪。我不知何故能够通过浏览整个页面来找到xpath。当我尝试单击它时,我得到“由:org.openqa.selenium.NoSuchElementException引起:没有这样的元素:无法定位元素:{"方法":"xpath","sele