Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据测试

【选课脚本】用Python网页爬虫来进行选(qiang)课 (更新至v1.0.8)

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

上一篇: JavaScript、ECMAScript、DOM和BOM对象

下一篇: 二分查找算法java版实现(递归实现与非递归实现)

精华推荐