- 更新了对选课网部分 API 的请求方法 (get_SupplyCancel, get_supplement)
- 实现了对选课网新验证码的识别
- 更新了对选课网部分 API 的请求方法 (get_supplement, get_Validate)
- 修复了无法获取到位于补退选列表第一页之后课程的问题,详见 Issue #54, Issue #55
- 修复了无法正确捕获会话超时的错误信息导致一直报错 UnexceptedHTMLFormat 的问题,详见 Issue #56
- 修复了无法正确识别补选课程成功时所返回的提示信息的问题
- User-Agent 池的大小扩充至 6000+
- sso_login 时将使用随机生成的 dummy cookie
- 删除所有
Sec-Fetch-*
请求头 - 现在 elective 客户端可以设置存活时间,到期后 elective 会话将自动登出,以期解决 Issue #47
- 每次重新登录 elective 时都将更换 User-Agent
- 现在可以选择是否打印完整的互斥规则列表
- 修正了配置文件和用户手册中关于
supply_cancel_page
选项的说明 - 修改配置文件中
elective_client_pool_size
选项的默认值为2
- 程序启动时将首先打印重要的配置信息
- 对 elective 可能返回的错误页面加以捕获,以期解决 Issue #44
- 修改 sso_login 接口的参数名
rand
为_rand
- 更改识别 elective 响应结果的正则表达式,以确保包含空格的课程名也能被正确解析
- 修复了 IAAA 登录报 500 状态码的问题,详见 Issue #35
- 对相传可能出现的莫名其妙退课的情况做了防护,详见 Issue #30
- 在 elective 两个刷新接口的 headers 中添加了
Cache-Control: max-age=0
- 现在可以为课程定义延迟规则,详见 Issue #28
- 修改了部分代码风格
- 现在可以识别出因一学期选多门体育课而收到的来自选课网的错误提示
- 同一回合中出现多门可选的课,并且低优先级待选的课与高优先级已选的课因为 mutex rules 冲突,那么低优先级的课将会被提前忽略,详见 Issue #25
- 修正了
config.ini
注释中把班号
写成课号
的笔误 - 选课网有的时候会突然显示某门课的已选人数为 0,而实际选课人数已满,此时会报一个
Unknown tips
的异常,现在程序可以对这种情况做出识别
- 现在通过
config.ini
定义的课程列表可以像原来那样保持其在文件中的先后顺序,如果在同一循环中遇到同一列表中有多个课可选,将会按照从上往下的顺序依次提交 - 现在会捕获
Ctrl + C
在main.py
中引发的KeyboardInterrupt
,这样Ctrl + C
将不会再打印 traceback 而是正常退出
- 修改了
TypeError: argmax() got an unexcepted keyword argument 'axis'
的错误
- 修改了 iaaa 和 elective 相关接口的请求细节,包括更换某些 url,修改 headers,修改替换 scheme 为 https 等
- 修复了相同 Course 调用
__eq__
和__hash__
得到不同值的 bug - 修复了
assert self._status is not None
引发的AssertionError
- 修复了
mutexes
在无规则时仍然 print 列表的 bug
- 修复了 Windows 下
Ctrl + C
失效的问题
- 改用 pytorch 训练的 CNN 模型进行验证码识别,提高了识别的准确率
- 优化了验证码图像处理函数的执行效率
- 将多进程架构重写为多线程架构,监控进程现在变为和主进程下的一个子线程
- 允许自定义 User-Agent 列表
- 配置文件中
student_ID
键名改成student_id
- 不再使用
course.csv
文件配置课程列表,而是统一归入config.ini
中 - 允许用户自定义互斥规则,详见 Issue #8
- 重新设计了 monitor 的路由
- 现在 monitor 不会在 iaaa_loop / elective_loop 正常退出的时候自动退出
- 修改了多处代码风格和设计细节,删除了大量冗余设计
- 修复了
OperationFailedError
使用错误的父类派生而导致不能正常初始化的问题
- 修复了 Windows 下自定义参数不生效的问题
- 对 v2.0.8 版本的完善,现在删除了与
signal
相关的逻辑,统一了两种运行模式下主进程退出的方式,确保了Ctrl + C
的信号和子进程内部发出的终止信号均能使主进程正常退出
- 对 v2.0.6 版本的完善,该版本在不带
--with-monitor
运行的情况下,也可以正确地接收到来自Ctrl + C
的终止命令
- 为 monitor 添加了与错误捕获记录相关的路由
- 修复了在 Windows 下
Ctrl + C
无法退出程序的问题
- 可以捕获 IAAA 登录时的密码错误和多次登录失败导致账号已被封禁的错误
- 完善了对多进程/线程下进程死亡的处理,以确保主进程在遇到错误时可以完全退出
- 现在 monitor 进程会在 loop 进程结束后自动退出
- elective 客户端采用多会话机制
- 可以捕获来自 IAAA 的错误
- 丰富了部分错误的提示信息
- 添加了对处于选课计划第一页之后的课程的支持
- 代码重构,删减大量冗余设计
- 新增监视器进程,开启后可以通过特定端口监听运行状态
- 添加多账号支持,去除 cookies / token 本地共享的逻辑,并可以手动指定 config.ini / course.csv 文件的路径
- 修复了在一些情况下会话无法保持的错误
- 可以捕获几个新遇到的系统异常/错误提示
- 美化了终端的输出格式
- 修复了一处语法错误,位于 main.py 第 216-235 行的
ignored.append
处 - 纠正了一些变量名的拼写错误
- 可以捕获多选英语课引起的错误
- 兼容了本科生辅双的登录界面,主修身份选课测试通过,辅双身份选课支持第一页
- 可以捕获共享回话引起的系统异常
- 可以捕获辅双登录无验证信息的系统异常
- 研究生选课测试通过
- 兼容了部分页面没有
.//head/title
标签的情况 - 修改
Course
类的classNo
属性为 int 类型,确保01
与1
为同班号 - 主程序开始的第一个循环回合更改为首先主动登录一次,以免旧缓存导致无法切换账号
- 重新登录时会率先删除客户端已有的 cookies ,修复了一次重新登录需要花费两回合的问题
- 更改单一
User-Agent
为User-Agent
池 - 可以捕获课程互斥引起的错误提示
- 上线版本,支持非辅双本科生选课