从零搭建教务抢课系统(五)

374 阅读1分钟

目录

(一)核心功能:模拟登陆 (二)使用Cookie进行模拟登录 (三)获取教务网选课列表 (四)循环选课 (五)断线重连

Github链接: github.com/njuwuyuxin/…

断线重连

目前的抢课脚本的一个缺陷在于,当用户挂机进行自动抢课时,如果出现临时网络波动造成短时间断网,会造成抢课过程中断,程序异常退出。 而我们希望对于临时的网络中断或网络波动,可以自动尝试重连,自动恢复,防止一次临时断网导致程序退出。 因此这里为我们的抢课脚本加入了断线重连处理,主要思路为对requests请求失败时抛出的异常进行处理,如果发现了如连接失败或请求超时等情况,自动进行重试。 代码如下:

while True:
    try:
    selectResult = session.post(host+'student/elective/selectCourse.do',selectCourse_reqdata)
    except requests.exceptions.ConnectionError:
    connectionFailedFlag=True
    print("连接超时,正在尝试重新连接")
    time.sleep(1)
    else:
        if connectionFailedFlag:
            connectionFailedFlag=False
            print("重连成功,继续为您抢课")
        break

使用requests发出的post请求,当请求失败时会返回一个requests.exceptions.ConnectionError类型的异常。我们在外层使用了一个循环,如果请求成功则终止循环,如果接收到异常,则继续进行请求。

测试时首先启动抢课脚本开始抢课,期间手动断开电脑网络,一段时间后再重新连接网络,检查脚本是否能继续抢课。

测试结果如下:

测试成功