如果WebDriverWait超时,如何重新加载页面硒?蟒蛇

时间:2019-01-25 00:47:19

标签: 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]

谢谢

3 个答案:

答案 0 :(得分:0)

根据我的理解,您想在某个页面中找到一个元素,如果找不到,则需要刷新页面以再次尝试找到它。如果这是您的要求,那么您可以这样做:

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”。 else块将捕获该异常并匹配,然后刷新页面。

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

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]

这将每5秒通过忽略NoSuchElementException和StaleElementReferenceException异常(最多1分钟)来搜索元素。希望对您有帮助...

答案 1 :(得分:0)

尝试这个。希望对您有帮助

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

driver = webdriver.Chrome('D:/Chrome/driver/chromedriver.exe')
driver.get('https://www.google.com/')

notFound = True
count = 0
while notFound:
   wait = WebDriverWait(driver, 10);
   try:
    quote = wait.until(EC.presence_of_element_located((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
    notFound = False
   except:
      driver.refresh()
      count = count + 1
      print('looping to check element exists :' + str(count))
      if count > 30:
          notFound = False
          print('Element not found after 30 occurences..Exit from loop!!!')

答案 2 :(得分:-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]
    except TimeoutException:
        driver.refresh()
        retries += 1