/ustc-epc-spider

Web spider for ustc epc courses.

Primary LanguagePython

EPC Spider——最好用的EPC刷课工具

介绍

这是用来在中科大EPC(English Practice Center)平台上抢课的Python脚本。EPC在很多时候可谓是一课难求,尤其是drama。然而鲜有人知的事实是,每天都会有不少人退课,故“捡漏”成为了很有效的选课技巧。

通过使用此脚本,你能够方便地选到别人刚退掉的课程,完全可以做到今天抢课,明天就上课,甚至在一周内选到2次drama!

功能&特点

  1. 全自动抢课。自动识别验证码,被踢下线后(或者由于其他原因,cookies失效)也能自动登录。

  2. 在可预约学时足够时,自动抢指定时间区间内、指定类型的课程。

  3. 在可预约学时不足时,当有更早时间的课程有余位时,自动改签。

  4. 如果改签失败(通常是因为人数已满),程序会立即尝试回滚,重新选上刚刚退掉的课。

使用说明

脚本的所有配置均配置在仓库根目录下的config.json里。

如何指定时间区间

config.json内设置order_week_beforeequal和order_week_afterequal,即可设定想选的课的时间范围。

另外,当可用学时不足且replace.enable被启用时,replace_earlier也会影响时间区间。

  • 当replace_earlier为False时,选课区间为:

    [第order_week_beforeequal周开始, 第order_week_afterequal周结束]

  • 当replace_earlier为True时,只会选比candidate更早的课,即选课区间为:

    [第order_week_beforeequal周开始, candidate课程的开始时间)

如何启用改签

首先,需要将enable.replace设为True。这样,当可用学时不足时,程序会将已预约的课程改签至符合选课条件的一门课。

另外,可用"replace.candidate"指定一门将被改签的已预约课程,若不指定,则candidate默认为已预约的最晚课程。

若不想启用改签,可在config.json内把"enable.replace"设置为False

如何指定课程类型

config.json内有四个bool字段:"enable.situation_dialog", "enable.topical_discuss", "enable.debate", "enable.drama",当它们中的部分或全部被 设为true时,脚本会启用相应课程的查找。

"enable.situation_dialog"必须设为False,因为程序不支持抢1学分的课。

课程类型启用的越多,总体抢到课的概率越高,但总的刷新周期会变长,请酌情考虑。

config.json所有字段的解释

字段 说明
stuno 必填 字符串 你的学号
passwd 必填 字符串 你的密码 必须是研究生信息平台自己的,不是统一认证的密码。
verbose 必填 bool 是否实时在stdout输出余课的周数
enable.loop 必填 bool 是否在抢课操作后继续跑 (若设为True,则建议每天晚上看一下 以免选到了第二天上不了的课)
enable.order 必填 bool 是否启用选课 设为false的话,只会输出余课周数,而不会抢课
enable.replace 必填 bool 是否启用换课 当可用预约学时不足,且此项启用时,程序会考虑退掉已选的课,并换成更早的课
enable.duplicate 必填 bool 是否允许重复 如果你不想选已经上过的课,可将此项设为false
enable.situation_dialog 必填 bool 必须为false 暂不支持抢1学时的课,估计你们也会觉得很不划算
enable.topical_discuss 必填 bool 是否抢topical discussion
enable.debate 必填 bool 是否抢debate
enable.drama 必填 bool 是否抢drama
order_week_beforeequal 必填 int 最晚的选课周 周数大于此值的课将不会考虑.
order_week_afterequal 必填 int 最早的选课周 周数小于此值的课将不会考虑
replace.earlier 必填 bool 仅在enable.replace启用时有效 是否需要换成比被替换课程的时间更早的课程
replace.candidate 可空 string 被替换的课程名称 若空,则为已预约的最晚的一门课
replace.forbidden 可空 string 禁止被替换的课程名称
course.forbidden 可空 string 禁选的课程名称
course.favorite 可空 string 限选的课程名称 若非空,则只有该项指定的课程才会被考虑选

安装与运行

本脚本依赖python 3的requests包和Pillow包。

  1. 首先,git clone
  2. 复制config.json.exampleconfig.json
  3. config.json内填入相关信息。
  4. 运行`python epc_main.py

Credits

开发

  • songchaow 从小就喜欢写爬虫的他,这次终于写了一个实用的爬虫,并使用它为自己抢到了许多许多的drama...
  • ypluo 看了一下午的代码后,罗博为songchaow的爬虫添加了自定义可上课时间段的功能。他的代码位于分支time_demand。不过songchaow对此并不怎么感冒,因为songchaow只选drama...
  • ChaoWao WangChao小哥哥为爬虫添加了强大的验证码识别功能。从此,大家再也不用担心被踢下线啦。

产品经理

  • ChaoWao

    随着ChaoWang一阵阵对程序的吐槽,程序的功能被增补地越来越完善。

测试

  • ChaoWao 程序在早期存在各种不稳定,songchaow害怕自己心爱的drama被错误地退掉,不敢拿自己的账号测试。于是ChaoWang挺身而出,在前期找出了许多bug,为爬虫的稳定性做出了巨大贡献。

程序员鼓励师

你可以从这篇文章了解这个程序是如何诞生的(还没写完)。