目录
(一)核心功能:模拟登陆
(二)使用Cookie进行模拟登录
(三)获取教务网选课列表
(四)循环选课
(五)断线重连
Github链接: https://github.com/njuwuyuxin/CourseGrabber
断线重连
目前的抢课脚本的一个缺陷在于,当用户挂机进行自动抢课时,如果出现临时网络波动造成短时间断网,会造成抢课过程中断,程序异常退出。
而我们希望对于临时的网络中断或网络波动,可以自动尝试重连,自动恢复,防止一次临时断网导致程序退出。
因此这里为我们的抢课脚本加入了断线重连处理,主要思路为对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类型的异常。我们在外层使用了一个循环,如果请求成功则终止循环,如果接收到异常,则继续进行请求。
测试时首先启动抢课脚本开始抢课,期间手动断开电脑网络,一段时间后再重新连接网络,检查脚本是否能继续抢课。
测试结果如下:
测试成功
网友评论