- Thanks To JasonYANG170/AutoCheckBJMF ,根据自己学校的签到进行了简化
- 仅根据自己学校的班级魔方需求更改简化代码,仅支持GPS签到(可在范围外),其他功能请到项目AutoCheckBJMF项目查看其他内容
- 可配置多人签到
- 可配置QQ/WX通知签到情况
- 如果你觉得好用,
Please Starorz - 至今2025.9.10正常可用
项目已进行模块化重构,提高了代码的可维护性和可读性:
BJMF/
├── BJMF.py # 主程序,负责整体流程控制
└── utils/ # 工具模块目录
├── __init__.py # 模块初始化文件
├── config_manager.py # 配置文件管理模块
├── user_info.py # 用户信息获取模块
├── notification.py # 通知发送模块
└── attendance.py # 签到任务执行模块
- BJMF.py: 主程序入口,负责读取配置、遍历用户、调用签到任务
- config_manager.py: 处理配置文件的读取和保存
- user_info.py: 获取用户信息和班级信息
- notification.py: 处理QQ和微信消息发送
- attendance.py: 执行签到任务的核心逻辑
这种模块化结构使代码更易于维护、测试和扩展。
- 自动从指定课程中获取签到项
- 通过模拟表单提交,实现自动签到
- 签到成功后,发送QQ/WX消息通知(可选配,可以不用配置)
-
2025.10.14 v2版本
- 调整文件结构
-
2025.9.14 v2版本,修复了一些bug,新增了一些功能
- 班级码自动获取
- 输出用户相关信息,用于核对,因为即使是过时/错误的Cookie依旧可以进入页面返回200,所以需要检查一下用户信息是否正确
在使用该脚本之前,请确保安装以下依赖项:
pip install -r requirements.txt该脚本需要读取一个名为 data.json 的文件,其中包含必要的配置信息。请参考以下格式配置 data.json 文件:
{
"name": "xxx",
"class": "xxxxxx",
"lat": "xxxxxx",
"lng": "xxxxxx",
"acc": "xxx",
"cookie": "xxxx",
"QmsgKEY": "",
"WXKey": ""
},- 只需要配置json文件即可;
- py文件可根据实际需求更改
name: - 随便写,只是方便区分class- BJMF里的课程IDlat- 纬度lng- 经度acc- 海拔高度cookie- 从浏览器中获取的cookie信息,用于模拟登录状态推送参数QmsgKEY- Qmsg 服务的消息推送密钥,用于QQ发送消息(选填)WXKey- Server酱-Turbo版,用于微信通知消息(选填)
-
class- 使用抓包工具(比如HttpCanary,教程点击这里 ); 抓取一次签到过程,在过滤(Url关键词或者其他)界面中查找g8n- 具体视实际情况而定,了解到有的是
k8n,有的是g8n;代码里是g8n,若有不同记得修改; - 之后应该只有一条POST请求,为
https://g8n.cn/student/punchs/course/xxxxxx/yyyyyy, 其中的xxxxxx就是六位数的课程ID,yyyyyy就是具体的签到任务,这里不用管yyyyyy,代码中会自动获取
- 具体视实际情况而定,了解到有的是
-
lat和lng- 使用地图工具获取当前位置的经纬度,- 比如高德地图的坐标拾取器, 进去搜索自己的位置即可获取经纬度
-
acc- 海拔高度- 随便写个数字即可, 这里不用管
-
cookie- 从浏览器中获取的cookie信息,用于模拟登录状态- 方法1:使用抓包工具获取
- 方法2:使用浏览器开发者工具(F12)查看
cookie信息, 复制cookie信息
-
QmsgKEY- Qmsg 服务的消息推送密钥,用于发送QQ成功签到通知- Qmsg 官网注册账号即可获取 Qmsg官网, 教程在官网自行查询
- 如果你使用的是特殊网络下的主机遇到Qmsg发送不了的错误,比如
10054远程主机关闭了连接之类的,按照给出的网址修改DNS进行改进(至少我改过之后就不报错了)点击链接 - 若修改DNS后依旧无法使用Qmsg,显示错误,比如
远程主机关闭连接之类的,那么(那么可以将DNS改回来了,说明不是DNS的问题);可能就需要使用代理;- 确保电脑上已经有代理软件(
我使用的是clash,默认的代理端口为7890,那么我的代理就是http://127.0.0.1:7890,不同的软件占用端口视具体情况而定);在发送消息的代码前加入以下代码:proxy = "http://127.0.0.1:7890" proxies = { "http": proxy, "https": proxy }
- 然后在发送消息的函数
send_qq_message的post方法中加入proxies=proxies即可,如下所示:
response = requests.post(url, data=message , proxies=proxies)
- 确保电脑上已经有代理软件(
-
WXKey- Server酱-Turbo版 服务的消息推送密钥,用于发送微信成功签到通知- Server酱-Turbo版 官网微信扫码关注公众号获取 Server酱官网, 教程在官网自行查询
- 签到前打开抓包工具
- 进入VX进行签到
- 返回到抓包工具, 过滤(Url关键词或者其他)界面中查找
g8n找到Post请求, 复制其中的cookie和classID;这里的cookie全部复制就行 - 更详细方法请自行搜索
- 电脑打开微信也可以在网址栏查看
class ID,F12可以查看发送请求的Cookie(目前只看到了classID,Cookie可以尝试F12->网络中进行POST包的过滤查找,步骤在后面,往下滑查看) - 更详细的使用和安装方法:点击链接
- 这个方法可以在任意时候使用
- 电脑登录微信打开
http://g8n.cn/student/login?ref=%2Fstudent,点登录,打开签到页面 - 按F12打开开发者工具,切换到
网络(Network)标签,侧边栏找到一个全是数字的标签,再在打开的页面中点击Cookie, - 直接复制图中淡蓝色选中部分:
- 确保已安装所有依赖(见安装依赖部分)
- 配置好data.json文件(见配置方法部分)
- 直接运行程序:
python BJMF.py - 程序会自动为配置文件中的所有用户执行签到任务
- 程序会自动检测并填充空的class字段
- 如果用户信息获取失败(如cookie过期),程序会跳过该用户
- 程序运行完成后会自动保存更新后的配置文件
- 按Ctrl+C可以手动中断程序执行



