You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Selenium在网页加载超时(超10秒)时自动刷新并重试

问题与需求

当前代码可正常运行,但存在两个问题:

  • el1需等待网页完全加载后才计算时长,无法实时监控加载超时情况
  • 需要实现两个逻辑:
    1. 访问指定URL时,若加载时长超过10秒则执行browser.refresh()重试加载
    2. 若后续表单提交等操作耗时超过10秒,返回原URL重新执行整个流程
原代码
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:33:35