- 新的验证码识别模块依赖 opencv,安装命令
pip3 install opencv-python
- 新的验证码识别模块不再依赖于 joblib,并删除了对 simplejson 的可选依赖
- PyTorch 版本需保证大于 1.4.x,否则无法读取 CNN 模型
config.ini
中添加elective_client_max_life
用于设置 elective 客户端的存活时间,到期后 elective 会话会被主动关闭config.ini
中添加print_mutex_rules
选项,可以选择是否打印完整的互斥规则列表
- 现在定义在
config.ini
中的课程将会像原来那样保持其在文件中的先后顺序,相应的选课优先级按从上到下的顺序从高到低排
- 旧版本的 iaaa 和 elective 的部分 API 已经失效,请赶紧更新到最新 v3.0.3 及以上版本,旧版本将不再维护
- 不再使用
course.csv
定义课程列表,而是合并到config.ini
中,因此需要仔细查看手册的 基本用法 一节,以明确新的课程定义方法。最好对config.ini
进行完全重写 - 修改了
config.ini
中student_ID
键名为student_id
- 新引入了自定义选课规则的功能,更多请查看手册的 基本用法 一节
- 修改了监视器路由,详细查看手册的 监视器 一节
- 更多改动细节请查看 HISTORY.md 并重新阅读手册 README.md
- 这版在诸多方面均有较大改动,详细请查看 HISTORY.md
- 这版开始我不打算再提供项目的架构细节说明,如果你需要了解项目的实现细节,可以自行阅读源码
- Windows 在创建多进程时只能采用
spawn
方法,子进程创建后并不直接共享父进程已经设置好的的用户配置项,因此还需要将用户配置项userInfo
在进程中共享。但是userInfo
直接影响着最基本的config.py
,为了让用户自定义配置userInfo
能够在子进程中被正确应用,userInfo
的更新至子线程_internal.py
和config
单例的第一次初始化必须早于任何依赖于config
单例的方法的调用。 - 因此,这一版中对包调用的逻辑进行了大幅度的修改,删减了大部分包的在导入时即创建
_config
全局变量的逻辑,改成将config
变量在函数使用时才创建,并且将loop.py
和monitor.py
中的所有全局变量和全局函数声明为局部 - 个人觉得这个改动很丑陋,但是由于我的开发经验有限,一时想不到其他的写法,如果你对这个问题有更好的解决方法,欢迎发 Issue !
- 个人的一个改进想法是把多进程全部换成多线程,这样就不需要考虑资源共享的问题
- monitor 进程中
/loop
路由细分为/main_loop
和/login_loop
两个路由 - monitor 进程中
/all
路由添加了与错误捕获记录相关的键 - monitor 进程中添加了
/errors
路由
- 进程共享的 status 对象中的
loop
项细分为了main_loop
和login_loop
两个值,并添加了与错误捕获记录相关的键
- 修改了错误类
IAAANotSuccessError
的全局错误码
config.ini
内添加了 elective 多会话相关的配置config.ini
内删除了iaaa_relogin_interval
字段
- 为了应对选课网偶发的会话过期问题,为 elective 客户端引入了多会话机制,并删除了旧有的定时重登机制。具体见 README 中的 运行流程 小节
config.ini
内添加了client/supply_cancel_page
值,以支持不处于选课计划第一页的课程
- 新版对
config.ini
内的绝大多数配置项名称做了修改,需要用新提供config.sample.ini
重新填写一遍配置 - 添加了自定义
config.ini
和course.csv
- 添加了对
Flask
库的依赖,对于尚未安装该依赖的环境,还需额外运行pip3 install flask
如果你使用了 git
命令更新该项目,在输入 git pull origin master
后,可能会报错 error: Your local changes to the following files would be overwritten by merge:
,这是因为新版删除了 config.ini
和 course.*.csv
文件,而改用 config.sample.ini
和 course.*.sample.csv
代替。只需要输入以下命令即可消除冲突:
在项目根目录下:
$ git checkout config.ini
$ git checkout course.utf-8.csv
$ git checkout course.gbk.csv
- 在
BaseClient
内添加了persist_cookies
方法,会在hooks.py
内被调用,以确保在一些特定的错误下仍然可以保持会话 - 在
elective.py
的sso_login
的请求头中添加了一个固定的无效Cookie
以防止登录时报101
状态码 - 修改了
IAAA
的重新登录逻辑,由原来的遇到错误重登,变为每隔一段时间重登 - 在
loop.py
中对elective.py
的get_Validate
方法的调用结果添加了一层错误捕获,以应对非 JSON 格式的响应体