如果在等待时间driver.refresh()
中找不到元素,它会刷新页面,然后重试找到该元素,如何使用WebDriverWait(driver, 30)
?
这是我正在寻找的元素
quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
谢谢
答案 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