【选课脚本】用Python网页爬虫来进行选(qiang)课 (更新至v1.0.8)
日期: 2017-06-01 分类: 跨站数据测试 355次阅读
0x00 前言
每当选课的时候,都如同打仗一般
都有自己想要的课,但是名额就那么一点
于是各显神通,有人用 js,有人用 chrome 的 console
人生苦短,我用Python
(Last Update: 2020/09/22 版本号v1.0.8)
0x01 环境依赖
- Python 3.x
- 如果你想看 html 的结果,最好有个浏览器
Requirement.txt
beautifulsoup4>=4.6.0
bs4>=0.0.1
configparser>=3.5.0
lxml>=3.7.3
requests>=2.13.0
tqdm>=4.11.2
0x02 使用方法
获取程序
你可以直接git clone
最新版本的程序
$ git clone https://github.com/okcd00/CDSelector.git
$ cd CDSelector
$ vim config 修改登陆信息
$ vim courseid 修改选课信息
$ python CDSelector
https://github.com/okcd00/CDSelector/releases
你也可以去 release
页面下载当前最新的稳定版 Release;
当前 v1.0.8 版本的 release 打算做成无需任何依赖的 exe,尚未完成;
所以还是按上面的办法老老实实 git clone 吧。
修改文件 config
[info]
username = [你的SEP登陆帐户名,通常是个邮箱]
password = [你的密码,不用加双引号框起来]
runtime = [打算每隔多少秒尝试选课一次]
[action]
debug = false [debug模式输出大量的中间变量,为节省资源可设置为false]
enroll = true [轮询模式下无限循环尝试,没想过什么情况下需要设为false]
evaluate = true [验证选课成功与否,建议开启]
select_bat = false [打包选课,应用于类似英语B这种不让单独选,必须同时选“听说+读写”两个课才允许提交表单的特殊情况]
修改文件 courseid
一行是一门课,写成类似下文示例中一样,每行一门课的学院+编号即可
本次选课系统的更新中(此处指v1.0.8版本)课程编号和学院编号脱钩,所以目前需要在 courseid 里手动增加学院名称,"学院"二字允许省略,但前两个字必须得对。
计算机:081203M04003H
公管学院:030100M01004H
特别的,如果这门课你需要选成学位课的话,后面要加个 on
,也是用冒号隔开
计算机学院:081203M04003H:on
公管:030100M01004H:on
然后运行 CDSelector.py
python 文件名.py 是 PYTHON 代码的运行模式,如果你发现你安装完python之后,我的 CDSelector.py 文件双击就可以直接执行的话,是同样的效果。
$ python CDSelector.py
Debug Mode: True
Login success
Enrolling start
> Course Selection is unreachable or not started. <1134> Thu Jun 01 08:43:42 2017
如果显示ImportError: xxx,就是说缺少了某些python包,使用下面的指令直接安装即可,pip是随着python安装的时候自带的一个工具,不用额外下载。
$ pip install xxx
当然你如果稍微熟悉一些 python,也可以一次性安装所有依赖项
$ pip install -r requirements.txt
0x03 Source Code
代码比原先长了不少,全贴在这的话比较影响观看体验,移到文末最新的详细代码可移步 Github
- v1.0.0 web端访问部分参考了 scusjs 的实现方式,功能强化参考了 zoecur
- v1.0.7 感谢 bobo334334 提供错误样例,感谢 xzqforever 提供帐号测试
- (Updated: 2017/09/07) 选课系统参数微调,某些学院的课无法正常选上
- v1.0.8 感谢 daiiwei 同学提供帐号用于测试
- (Updated: 2020/09/22) 这回SEP选课系统改了不少,大改。版本号 v1.0.8
- 更新了学院ID词典,由课程编号前两位改成了无规律的3位整数
- “403 Forbidden” 更加多发,增加了多种headers防止403
- “会话过期重新登录”更加频繁,新采用Cookie模式以维持登录状态
- 优化日志输出,并在关键页面保存离线页面。在选课系统流量爆炸时提供轻量级本地网页查看,通过repository 里预设的 js/css,允许仅加载网页源码,可以达到相对轻量级的可视化检查。
0xFE 获取途径
- Github: https://github.com/okcd00/CDSelector
- Release: https://github.com/okcd00/CDSelector/releases
- 说明文档: http://blog.csdn.net/okcd00
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐