江理工选课脚本

请不要用于非法用途,否则后果自负。

严禁将此代码滥用,后果自负,源代码仅供技术交流

说明:不建议没有任何计算机操作基础的同学使用,虽然尽本人努力最大化的傻瓜式了,但是操作还是有一定难度。

运行环境

Python 3.7.x

依赖:

requests==2.22.0

Flask==1.1.1

Flask-Cors==3.0.8

prettytable==0.7.2

若有依赖没写全,自行安装即可。

脚本使用说明

本来呢,这个是一个利于我自己的一个修改参数就能跑的Python脚本。

后来发现,这个接口一直有效,故将其贡献给大家参考吧。

所以,后来用LayUI做了一个Web界面,做了一点网页交互。

目前还不可以直接通过网页端进行控制脚本的启动、暂停,如有兴趣,欢迎Fork。

使用方法

git clone https://github.com/onionnet606/jsutElective.git

cd jsutElective

# 安装依赖

pip install -r requirements.txt

python webService.py

安装Python以及依赖库

Python安装方法网上很多,安装3.7即可。

依赖库建议使用pip安装,需要的依赖都在requirements.txt。

运行webSevice.py网页API服务

打开http://127.0.0.1:5002/网址

配置相关配置,保存

运行main.py脚本

如何全自动抢课?

全自动抢课依靠Python脚本的无限轮询。

首先你需要确定你需要抢的哪些课,这些可以再网页中进行操作。

在网页中的当前可选课程中,添加想要选择的课进入待选

如果当前选课列表中没有你想要的课程,建议去教务系统中查询选课课号然后手动添加

全部选择完成后,可以在待抢课信息中看到你之前选择的

确认后,保存到文件即可

在这之后,运行main.py文件即可:

python main.py

成功选中一门课后,会自动停止运行。

如何设置推送?

如果需要在抢课成功后推送到微信中,可以尝试使用Server Chan微信推送服务

申请好了SCKEY后,替换掉json/config.json下的serverchan字段即可,若不需要则留空。

config.json配置文件说明

{

// Server酱推送的SCKEY

"serverchan" : "",

// 重复次数,即每次刷新列表后若匹配到了需要抢的课程会重复这么多次抢课操作

// 此举是因为抢课那边的API接口有时候虽然返回成功,但是依旧是没有抢上的操作

"repeatTimes" : 5,

// 每次刷新的最大时间

"refresh_time_up" : 2,

// 每次刷新的最小时间

"refresh_time_down" : 0,

// 学生ID

"student_id" : "2018144138"

}

如何手动添加待选课列表?

在json/addition.json中,添加你想要添加的即可。对应格式如下:

{

"选课课号": "课程名称"

}

事实上,我们不会去判断课程名称是否一致,我们值判断了选课课号是否一致。课程名称与真实课程名称不同也是可以的,这是为了便于区分每门课。

速度如何?

首先,肯定比手工快。刷新速度最低可以是0,所以可以实现在1秒内重复请求N次。

其次,全自动。只需要设置一个学号,选好你要选择的课,启动即可,抢到了自然会发推送信息给你。

实际使用效果是一旦开启了,我基本都抢到了。

使用这个工具抢到了接近十一节网课,所以速度是肯定没问题的。

另外,这个可以一直挂着直到选课时间截至,因为中途会有退课等多出来的位置,所以可以捡漏。建议在捡漏的时候,时间间隔设置在2-4秒左右。

常见问题

刷新速度如何设置?

速度建议在1秒以上,设置0固然爽,但是容易个服务器造成压力,从而导致你的IP被Ban。之前由于设置太快,应该是被ban过一次。

抢课逻辑?

刷新可选课程列表 -> 若有课程是需要抢的 -> 提交选课 -> 判断已选列表内是否有选课信息

若有其他问题,直接提Issues。

选课号获取方法

进入教务系统,选课列表(一般提前一天会公布)

开启浏览器开发者工具(F12),选择你想查看的课程名称,定位其元素

查看元素的onclick值,里面的xkkh就是了

感谢

感谢@Chuck的整理及开发帮助

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐