又写了个名叫'厦门大学本科生自动选课工具'的玩具

2016/09/15

趁着开学初选课系统开放,抓了个包,写了个自动选课工具。原理很简单,就是不断自动发包模拟点击”选课”按钮,没有技术含量。也许有同学需要,略加完善放了出来。

说明:

  1. 本工具仅仅能在规定选课时间内选择符合规则的课程,其效果相当于自动点击选课按钮,不在选课轮次、课程已选满等情况本工具无效。

  2. 使用本工具需要一定的基础(至少会配置Python环境吧)

  3. 因为缺乏测试账号,目前只支持主修选课,如有需要辅修重修选课请Fork后自行修改。

  4. 因为是玩具加上鄙人水平、时间有限,代码写得很粗糙,有些地方逻辑处理得一般,有些Exception没有处理,还望大神见谅。

  5. Windows环境下由于GBK编码的问题中文可能会导致乱码,因此交互基本是英文。

  6. 本程序只是自动Post,不是作弊,如有不符合“吓大价值观”的地方,请不要两小时内让我滚蛋[微笑]。 start

开源项目

本工具使用 Python 2.7.11 编写,完全开源,你可以从我的Github页面上下载py文件进行修改、执行。工具在Windows 10 和 Ubuntu 16.04 环境下测试通过。

名词解释

使用过程中可能遇到的一些名词:

  • Course Id: 课程代码,一串字符。使用Chrome浏览器打开选课系统,找到要选择的课程,右击课程名称,点击”检查”,在弹出的界面中有’id=’,引号内的那串字符便是 Course Id (使用查看框架源代码功能也可以获取此id)。 比如下图中的 3689E2EB9B87014EE053D2220036014E 是统计学导论课程的 Course Id。 getId

  • Course Type: 课程类型,一个数字。1表示全校性必修课,2表示院系必修课,3表示全校性选修课,4表示院系选修课,5表示公共课。请注意与选课系统中的顺序有区别,请务必确保 Course Id 和 Type 对应。

  • Turns Code: 选课轮次,七位整数。前四位表示学年,2016-2017学年即为2016;第五位表示学期,第一学期即为1;最后两位表示选课轮次,第四轮即为04,选课轮次请在教务处网站上查询。例如现在(2016年9月15日),查询教务处网站可知,当前为2016-2017学年第一学期第四轮选课,Turns Code 即为2016104。 turns

使用示例

以2016-2017学年第一学期第四轮选课,自动选择名为统计学导论的院系选修课为例,展示一下使用流程。

  • 配置完 Python 环境并安装所有依赖库后执行脚本,在主界面输入1,然后输入A,添加待选择课程 cid

  • 按照”名词解释”中的方法获取 Course Id 和 Type 并输入,按下回车键。此时输入A继续添加课程,输入B返回主界面,输入课程前面的数字(比如1)可以删除已经添加的课程。我们输入B返回主界面 ctype

  • 在主界面输入2开始自动选课。这里输入3可以清空所有课程并把程序重置为初始状态,输入4可以退出程序 back

  • 输入学号密码,输入弹出的验证码后登陆成功(没写验证码识别模块,大神可以加上)。然后输入选课轮次,本例中为2016104

(2017/08/24 更新: 厦门大学选课系统验证码的识别已经实现,可参见这篇博客) captcha

  • 选择自动选课模式。1为尝试指定次数后停止,2为一直尝试直到手动停止。我们输入2,一段时间后手动停止程序 loop

  • 登录选课系统查看结果(已经登录的需要退出后重新登录),统计学导论已经成功选课。 result

最后

这个工具只是循环Post,再次强调效果相当于不断点击选课按钮,无法突破选课系统已有限制。可以在开放选课之前就指定要选择的课程,可以修改代码把学号、密码、选课轮次写入其中,不用每次输入,在先到先得时可能比较有效果(如果服务器崩溃那我也无法)

另外,写此工具的时候,见识了敝校教务系统前端页面的全中文注释,见识了参数全部使用中文拼音首字母命名的奇观,感慨一下世界之大。当然,在见识过沪上某校的选课系统后,对比下来敝校的还没有那般不堪(大家一起来比烂)。

Post Directory