A tool for RUC students to select courses.
Project description
中国人民大学半自动化抢课脚本
欢迎 Star!
适用:时间优先选课阶段(即本学期末,下学期初)
支持:
- 整点运行
- 请求速度控制
- 自动重试
- 自动停止
Simple Usage
pip install ruccourse
ruclogin # only need to run once
ruccourse --verbose
关于 ruclogin 这个包,你可以查看 ruclogin 的具体文档。
像这样
(base) PS D:\Code\RUC-CourseSelectionTool> pip install ruccourse
....
(base) PS D:\Code\ruclogin> ruclogin
username, type enter to skip: 2021201212
password, type enter to skip: ABC12345
browser(Chrome/Edge/Chromium), type enter to skip:
driver_path, type enter to skip:
Config D:\Program\anaconda3\Lib\site-packages\ruclogin\config.ini updated:
Username: 2021201212
Password: ABC12345
Browser: Chrome
driver_path: D:/Other/driver/chromedriver.exe
Test login? (Y/n):
你好, 信息学院 xxx from v.ruc.edu.cn
你好,xxx 图灵实验班(信息学拔尖人才实验班),你一共修了123学分,48门课,平均绩点3.9,专业排名第2名 from jw.ruc.edu.cn
driver init time: 4.749s
v.ruc.edu.cn get cookies time: 1.587s, check cookies time: 0.348s
jw.ruc.edu.cn get cookies time: 1.925s, check cookies time: 0.395s
(base) PS D:\Code\RUC-CourseSelectionTool> ruccourse --verbose
2023-12-20 17:10:25,184 - IMPORTANT_INFO - 脚本开始运行
2023-12-20 17:10:25,184 - IMPORTANT_INFO - 加载配置文件 D:\Program\anaconda3\Lib\site-packages\ruccourse\config.ini
2023-12-20 17:10:25,184 - IMPORTANT_INFO - 日志输出到 D:\Program\anaconda3\Lib\site-packages\ruccourse\ruccourse.log
2023-12-20 17:10:25,184 - ERROR - 抢课列表为空
你需要先手动选择要抢的课,是否现在开始选择(请确保你已经正确配置好 ruclogin) Y/n:
请等待脚本输出“等待浏览器被关闭...”后,再开始选择课程,选择后关闭浏览器。按回车键继续...
在浏览器里,选一遍所有你想选的课程(即使失败)
等待浏览器被关闭...
你选择的课程是: 信息检索导论01班
2023-12-20 17:10:25,185 - IMPORTANT_INFO - 学期:2023-2024学年夏季学期
2023-12-20 17:10:25,185 - IMPORTANT_INFO - 待抢课程:信息检索导论01班
2023-12-20 17:10:25,185 - IMPORTANT_INFO - gap=0,脚本将不间断执行
2023-12-20 17:10:26,580 - INFO - req/s: 17.621 tru_reqs/s: 15.663 total: 18
2023-12-20 17:10:27,571 - INFO - req/s: 21.356 tru_reqs/s: 20.362 total: 43
2023-12-20 17:10:28,588 - INFO - req/s: 22.442 tru_reqs/s: 20.792 total: 68
2023-12-20 17:10:28,519 - IMPORTANT_INFO - 抢到 信息检索导论01班
2023-12-20 17:10:28,919 - IMPORTANT_INFO - 脚本已停止
Advanced Usage
- 见
ruccourse --help
- 默认情况下(即不加
--verbose
参数时)抢到课或同类别选满会输出到控制台,速度监控会输出到文件,这样你可以一眼看出有没有抢到课 - 配置文件中包含更多可设置量
Q&A
Q:如何更新抢课列表?
A:ruccouse --recollect
Q:运行原理?
A:暴力发选课请求,直到抢到,或者同类课达到选课上线。其实抢课的实现不复杂,但是之前的测试表明,cookies 容易失效,所以现在配合 ruclogin 可以保证抢课不中断。
Q:有没有被检测的风险?
A:经过 2021-2023 年三年抢课的尝试,1000/s 的请求速度都没有出现过问题,当然,没必要设这么高,除非你们在科技对战?脚本默认参数是 30/s,已经足够。
Q:为什么是半自动化?
A:人大的教务系统写得“非常好”,抢课请求里面引入了一大堆意义不明,命名不明的不知道怎么填,不填还会炸的参数,研究清楚太费劲,遂采用抓包的方法。
Q:控制台输出 “WARNING - 44.55% 的请求被拒绝,真实请求速度为 29.251 req/s,最低请求速度为 4.897 req/s”
A:系统有时候会返回“服务器繁忙,请稍后再试!”,这表示一个无效请求,当最低速度(对某课程)超过阈值时(比例 * 期望总请求速度 / 课程数),脚本会输出警报,你需要自行判断其程度是否会影响你的抢课,比例可以在 config.ini
文件里调整。注意,如果你同时打开了动态调整请求速度,那么其调整的是真实请求速度,即被服务器正确处理的请求。
Q:怎么支持一上来就抢课?
A:不支持,必须先抓包,一个可能的方法是提前抓包,下阶段抢课,但是实测参数不同,你可以试试。
效果
抢别人后阶段退的课,实际上这种名额挺多的,我抢过:
- 社会主义500年
- 素质拓展
- 电影导论
- 后人类时代的全球影像
这些课最初的中签率都在 10% 到 30% 之间。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file ruccourse-0.1.1.tar.gz
.
File metadata
- Download URL: ruccourse-0.1.1.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 42c8e607b024aed01726136a89fa79e7872be2d66947320afde2faeffcf8948f |
|
MD5 | b8f12c287e67ff480ace8d9261a662ad |
|
BLAKE2b-256 | 3fd33842d6a6fa8699ecc47e0895175dd5732e16d048006642f2658f8291e723 |
File details
Details for the file ruccourse-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: ruccourse-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff7f5d2e2da8f6e2ef8e1a05c92e7c97a515085975c48352208b548c203cd47e |
|
MD5 | 28816b30d2d1f9c518d7d888e09452a7 |
|
BLAKE2b-256 | 27d99daf7e9a30065ab0d42081f5d2fdb9bd53ef1e377cef107948a28691d125 |