这是一个用于辅助同济大学学生进行第三轮和第四轮课程选择的Python脚本。它可以自动、高频地重复提交选课请求,直到您指定的所有目标课程都成功选上为止。
脚本初版由 Wangtk311 编写于2025年3月,优化版由Truman-min-show 编写于2025年9月的第四轮抢课期间,基于最新的选课系统API。
- 本脚本仅为辅助工具,仅模拟用户正常的浏览器操作,不包含任何绕过身份验证或攻击服务器的功能,旨在帮助同学们从繁琐的、重复的点击操作中解放出来,不得用于任何商业牟利或恶意抢占课程资源等非法行为。
- 请在学校规定和道德准则的范围内使用本脚本。对于因滥用本工具而导致的任何后果(如选课资格被取消、受到学校处分等),脚本作者概不负责。
- 如有任何问题或疑虑,请立即联系作者,作者将酌情提供帮助或删除此项目。
- 自动化抢课:配置完成后,一键启动,脚本将自动循环尝试选课,直到所有目标课程都成功。
- 状态清晰:实时显示每次尝试的结果、当前已成功和待抢的课程列表。
- 配置简单:只需根据详细的抓包指南,填写少量个人选课信息即可运行。
本脚本通过模拟浏览器在选课时向同济大学服务器发送的API请求来工作。它使用您通过抓包获取的个人身份凭证 (X-Token)、选课操作信息 (ciphertext, checkCode) 以及课程的唯一内部ID (teachClassId) 来提交选课请求,并循环查询选课结果。
确保您的电脑上已经安装了 Python 和 requests 库。
- 安装 Python: 请从 Python官网 下载并安装最新版的 Python。
- 安装 requests 库: 打开终端(或CMD),运行以下命令:
pip install requests
您需要通过浏览器的F12开发者工具来获取脚本运行所需的全部信息。
这部分是为了获取 X-Token, ciphertext, 和 checkCode。
- 登录选课系统,按
F12键打开开发者工具,并切换到Network(网络) 选项卡。 - 在选课页面上,勾选一些课程,然后点击 “保存课表” 按钮。
- 在
Network的请求列表中,找到一个名为elect的请求,点击它。 - 在右侧出现的窗口中:
- 切换到
Headers标签页,向下找到Request Headers部分,复制X-Token的值。 - 切换到
Payload标签页,分别复制ciphertext和checkCode的值。
- 切换到
- 继续停留在
Network选项卡。 - 在选课结果的弹窗中,点击下方的 “关闭” 按钮(而不是右上角的'×'),这通常会触发课程列表的刷新。或者,你也可以直接刷新整个页面。
- 在
Network请求列表中,寻找一个加载了所有课程信息的请求。这个请求的URL通常以getTeachClass4Limit?...开头,并且返回的内容(Size)会比较大。 - 点击这个请求,切换到
Response或Preview标签页。 - 按
Ctrl + F搜索您想抢的课程的课号 (如101099) 或课程名称。 - 在搜索到的课程信息中,找到
teachClassId字段,复制它对应的值(一长串以1111...开头的数字)。 - 特别注意:同一门课的不同时间段(例如周一的班和周三的班)有不同的
teachClassId。请务必核对您复制的teachClassId旁边的teachClassCode字段(如10109901)是否为您想要的上课班级。
打开 CourseFetch_Pro.py 文件,将您在第二步中获取到的所有值,填入到用户配置区域的对应位置。
# ToDo 1: 填入您的 X-Token
headers = {
"X-Token": "在这里替换成你自己的X-Token",
}
# ToDo 2: 填入您的 ciphertext 和 checkCode
data = {
"ciphertext": "在这里替换成你自己的ciphertext",
"checkCode": "在这里替换成你自己的checkCode"
}
# ToDo 3: 填入您想抢的所有课程的【teachClassId】列表
# 例如: targetCourseIds = [1111111124934476, 1111111124934261]
targetCourseIds = []
# (可选) 请求间隔, 单位秒
interval = 3- 打开终端 (或CMD)。
- 使用
cd命令进入CourseFetch_Pro.py文件所在的文件夹。 - 运行以下命令启动脚本:
python CourseFetch_Pro.py
- 脚本会开始自动运行。当所有目标课程都选上后,脚本会自动退出。在运行过程中,您可以随时按
Ctrl + C来手动终止脚本。