如何让Selenium在网页加载超时(超10秒)时自动刷新并重试
问题与需求
当前代码可正常运行,但存在两个问题:
el1需等待网页完全加载后才计算时长,无法实时监控加载超时情况- 需要实现两个逻辑:
- 访问指定URL时,若加载时长超过10秒则执行
browser.refresh()重试加载 - 若后续表单提交等操作耗时超过10秒,返回原URL重新执行整个流程
- 访问指定URL时,若加载时长超过10秒则执行
原代码
from selenium import webdriver import time browser = webdriver.Edge() st1 = time.time() browser.get("http://app1.helwan.edu.eg/Commerce/HasasnUpMlist.asp") et1 = time.time() el1 = et1-st1 print(f"Elapsed Time is: {el1} Seconds") # 10.48 st2 = time.time() my_id = browser.find_element("name","x_st_settingno") submitting = browser.find_element("name","Submit") my_id.send_keys(18760) submitting.click() et2 = time.time() el2 = et2-st2 link_to_natega = browser.find_element("xpath",'//*[@id="ewlistmain"]/tbody/tr[3]/td[9]/font/b/span/a') link_to_natega.click()
修改后的代码
from selenium import webdriver from selenium.common.exceptions import TimeoutException import time browser = webdriver.Edge() # 设置页面加载超时时间为10秒 browser.set_page_load_timeout(10) target_url = "http://app1.helwan.edu.eg/Commerce/HasasnUpMlist.asp" def run_workflow(): while True: try: # 访问目标URL,超时则触发异常 st1 = time.time() browser.get(target_url) et1 = time.time() el1 = et1 - st1 print(f"页面加载耗时: {el1:.2f} 秒") break except TimeoutException: print("页面加载超时,正在刷新...") browser.refresh() # 执行表单提交操作,监控耗时 st2 = time.time() try: my_id = browser.find_element("name", "x_st_settingno") submitting = browser.find_element("name", "Submit") my_id.send_keys(18760) submitting.click() # 等待页面跳转完成,可根据实际情况调整等待逻辑 browser.implicitly_wait(2) et2 = time.time() el2 = et2 - st2 print(f"表单提交操作耗时: {el2:.2f} 秒") if el2 > 10: print("表单操作超时,重新执行整个流程...") run_workflow() return # 点击成绩链接 link_to_natega = browser.find_element("xpath", '//*[@id="ewlistmain"]/tbody/tr[3]/td[9]/font/b/span/a') link_to_natega.click() except Exception as e: print(f"操作过程出错: {str(e)},重新执行流程...") run_workflow() # 启动流程 run_workflow()
关键说明
- 使用
browser.set_page_load_timeout(10)设置页面加载的超时阈值,超时会抛出TimeoutException,此时自动执行刷新重试 - 用递归函数
run_workflow()封装整个流程,当表单操作超时或出错时,重新调用自身重启流程 - 表单操作后增加
implicitly_wait确保页面元素加载完成,避免因元素未就绪导致的异常 - 实时计算并打印各阶段耗时,方便监控执行状态
内容的提问来源于stack exchange,提问作者Esmael Awad
相关产品推荐
相关产品推荐

