Skip to main content

A tool for RUC students to select courses.

Project description

中国人民大学半自动化抢课脚本

PyPI Downloads GitHub Repo stars

欢迎 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ruccourse-0.1.1.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

ruccourse-0.1.1-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

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

Hashes for ruccourse-0.1.1.tar.gz
Algorithm Hash digest
SHA256 42c8e607b024aed01726136a89fa79e7872be2d66947320afde2faeffcf8948f
MD5 b8f12c287e67ff480ace8d9261a662ad
BLAKE2b-256 3fd33842d6a6fa8699ecc47e0895175dd5732e16d048006642f2658f8291e723

See more details on using hashes here.

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

Hashes for ruccourse-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ff7f5d2e2da8f6e2ef8e1a05c92e7c97a515085975c48352208b548c203cd47e
MD5 28816b30d2d1f9c518d7d888e09452a7
BLAKE2b-256 27d99daf7e9a30065ab0d42081f5d2fdb9bd53ef1e377cef107948a28691d125

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page