如果WebDriverWait超时,如何重新加载页面selenium?python

如果WebDriverWait超时,如何重新加载页面selenium?python,python,selenium,selenium-webdriver,selenium-chromedriver,Python,Selenium,Selenium Webdriver,Selenium Chromedriver,如何使用driver.refresh()如果在等待时间WebDriverWait(driver,30)找不到元素,它会刷新页面,然后重试查找元素 这就是我要找的元素 quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1] 谢谢根据我的理解,您希望在某个页面中找到某个元素,如果找不到该元素,则需要刷新页面以重试查找

如何使用
driver.refresh()
如果在等待时间
WebDriverWait(driver,30)
找不到元素,它会刷新页面,然后重试查找元素

这就是我要找的元素

quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]

谢谢

根据我的理解,您希望在某个页面中找到某个元素,如果找不到该元素,则需要刷新页面以重试查找。如果这是您的要求,那么您可以这样做:

wait = WebDriverWait(driver, 30);
try:
    quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
except TimeoutException:
    driver.refresh()
在上面的代码中,如果在给定的超时时间内找不到元素,try块将抛出'TimeoutException'。except块将捕获该异常并匹配,然后刷新页面。

上述代码只执行一次此活动。如果要继续此过程直到找到元素,请使用以下代码:

notFound = True
while notFound:
    wait = WebDriverWait(driver, 30);
    try:
        quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
        notFound = False
    except TimeoutException:
        driver.refresh()
但是不推荐使用上述解决方案,因为如果它没有找到它正在查找的元素,那么代码将进入无限循环状态。为了避免这种情况,我建议您使用FluentWait,如下所示:

wait = WebDriverWait(driver, 60, poll_frequency=5, ignored_exceptions=[NoSuchElementException, StaleElementReferenceException]);
quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]

它将通过忽略NosTouchElementException、StaleElementReferenceException异常(最长1分钟)每5秒搜索一个元素。我希望它有帮助…

根据我的理解,您希望在某个页面中找到某个元素,如果找不到该元素,则需要刷新页面以重试查找。如果这是您的要求,那么您可以这样做:

wait = WebDriverWait(driver, 30);
try:
    quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
except TimeoutException:
    driver.refresh()
在上面的代码中,如果在给定的超时时间内找不到元素,try块将抛出'TimeoutException'。except块将捕获该异常并匹配,然后刷新页面。

上述代码只执行一次此活动。如果要继续此过程直到找到元素,请使用以下代码:

notFound = True
while notFound:
    wait = WebDriverWait(driver, 30);
    try:
        quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
        notFound = False
    except TimeoutException:
        driver.refresh()
但是不推荐使用上述解决方案,因为如果它没有找到它正在查找的元素,那么代码将进入无限循环状态。为了避免这种情况,我建议您使用FluentWait,如下所示:

wait = WebDriverWait(driver, 60, poll_frequency=5, ignored_exceptions=[NoSuchElementException, StaleElementReferenceException]);
quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]

它将通过忽略NosTouchElementException、StaleElementReferenceException异常(最长1分钟)每5秒搜索一个元素。我希望它能帮助…

如果条件没有满足
WebdriverWait
抛出异常-
TimeoutException
;您可以捕获它,然后重试。
同时,您希望限制重试次数-元素可能永远不会出现,您不希望此块永远运行

retries = 1
while retries <= 5:
    try:
        quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
        break
    except TimeoutException:
        driver.refresh()
        retries += 1
retries=1

如果条件未满足,则重试
WebdriverWait
引发异常-
TimeoutException
;您可以捕获它,然后重试。
同时,您希望限制重试次数-元素可能永远不会出现,您不希望此块永远运行

retries = 1
while retries <= 5:
    try:
        quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
        break
    except TimeoutException:
        driver.refresh()
        retries += 1
retries=1

欢迎重试。在这个话题上有很多关于Stackoverflow的问题。你看过他们吗?如果没有一个不适用,那么你的问题与他们有什么不同?请重新阅读,特别是“和研究”部分,并编辑您的问题以显示您的研究。欢迎。在这个话题上有很多关于Stackoverflow的问题。你看过他们吗?如果没有一个不适用,那么你的问题与他们有什么不同?请重新阅读,特别是关于“和研究”的部分,并编辑您的问题以显示您的研究。异常
NoSuchElementException
由WebDriverWait本身处理,因此永远不会提出。您的最后一个建议实际上是将等待时间间隔延长到60秒,并使用5秒的共享时间-这本身不是一个坏主意,尤其是对于反应较慢的UI操作,但是-它不会重新加载页面,因此使用相同的DOM。@Todor Minakov Yes,它不会刷新页面,并将每5秒轮询一次以再次查找元素。感谢您捕获由WebDriverWait itsefl处理的“NoTouchElementException”,错过了这一点。我正在提出“不刷新”,因为OP已经在使用WebDriverWait,而问题本身是“如果WebDriverWait超时,如何重新加载页面selenium?”。你的提议没有增加太多内容,只是需要再等一段时间。我建议他避免刷新页面。他正在刷新页面,因为他在指定的WebdriverWait时间内找不到元素,他在想,如果他刷新页面,他可能会找到元素。我尝试先回答这个问题,然后尝试推荐其他方法。谢谢你的建议或建议或任何东西!由于我是这个平台的新手,可能我需要一些时间来学习所有这些东西。异常
NoTouchElementException
由WebDriverWait本身处理,因此它永远不会被引发。您的最后一个建议实际上是将等待时间间隔延长到60秒,并使用5秒的共享时间-这本身不是一个坏主意,尤其是对于反应较慢的UI操作,但是-它不会重新加载页面,因此使用相同的DOM。@Todor Minakov Yes,它不会刷新页面,并将每5秒轮询一次以再次查找元素。感谢您捕获由WebDriverWait itsefl处理的“NoTouchElementException”,错过了这一点。我正在提出“不刷新”,因为OP已经在使用WebDriverWait,而问题本身是“如果WebDriverWait超时,如何重新加载页面selenium?”。你的提议没有增加太多内容,只是需要再等一段时间。我建议他避免刷新页面。他正在刷新页面,因为他在指定的WebdriverWait时间内找不到元素,他在想,如果他刷新页面,他可能会找到元素。我尝试先回答这个问题,然后尝试推荐其他方法。谢谢你的建议或建议或任何东西!由于我是这个平台的新手,可能我需要一些时间来学习所有这些东西。我认为你应该在tr中添加“等待后休息”