说明

项目地址:BytePrince/Auto_Sign_For_NBU

本项目2020.05.03前所有代码均为本人原创,自2021.01.24后更新的代码参考子墨大佬的ZimoLoveShuang/auto-submit。至于为何不再重构自己去年写的代码,文末会提到。

本人修复了Bug,移除了不必要的代码并适配了宁波大学的每日信息填报打卡(理论上适配宁波大学所有学院)。

如果对你有帮助,请给BytePrince/Auto_Sign_For_NBU点上一个Star⭐。

使用方法

准备

Clone本项目

git clone https://github.com/BytePrince/Auto_Sign_For_NBU.git 

信息填写

  1. config.yml中填写自己的个人信息

示例如下:

users:
   - user:
         #此字段填写你的学号
         username: '17600****'
         #此字段填写你的今日校园登录密码
         password: '******'
         #此字段填写你的地址,即定位信息,如下图
         address: 中国浙江省xx市xx区xx路
         #email 接受通知消息的邮箱
         email: xxxxxxxxxx@qq.com
         #school 学校全称
         school: 宁波大学

位置信息

  1. config.yml中填写表单信息

表单内容可能会发生变化,后期如果表单内容更新频繁的话可能会写一个表单内容自动更新API,示例如下:

cpdaily:
  #表单组默认选项配置,按照说明填写即可。
  defaults:
    #表单默认选项配置,按顺序,注意,只有标必填项的才处理
    - default:
        #表单项类型,对应今日校园接口返回的fieldType字段,1代表文本,2代表单选,3代表多选,4代表图片
        type: 2
        #表单项标题
        title: 1. 今日您的健康情况是?(如有发热等呼吸道症状,请第一时间报备辅导员)
        #表单项默认值
        value: 健康
    - default:
        type: 2
        title: 今日您的甬行码颜色是?
        value: 绿色
    - default:
        type: 2
        title: 今日您是否存在其他异常情况?
        value: 无
    - default:
        type: 2
        title: 明日你是否有出行计划(离开居住地所在市)
        value: 否
  1. config.yml中填写通知接口信息

此处用于每天自动打卡后发送通知。由于QQ或者邮件通知配置过程对小白来说会复杂一些,将这两种通知方式移除,仅仅保留ServerChan通知。获取ServerChan的密钥的方法详见文档

部署

可以部署在自己的云服务器上或者直接使用云服务商的云函数。

云函数

参考文档。(学思路,不要照抄啊喂🤪)

云服务器(推荐)

当然,如果你手头没有云服务器,还是推荐使用云函数来执行脚本,毕竟可以省钱。

  1. 上传填写好个人信息的项目文件上传到你已经安装好Python3.X的云服务器;

  2. 进入项目根目录,安装依赖;

    pip3 install -r requirements.txt
  3. 手动执行脚本,测试是否可以正常运行,如果运行结果显示模拟登陆成功...,则说明环境已经配置完毕。

    python3 index.py
  4. 根据自己的目录,添加定时任务。笔者的项目根目录为/opt,每天下午15:01执行脚本,并作了日志的记录。

    01 15 * * * root /usr/local/bin/python3 /opt/index.py >> /opt/sign.log 2>&1 &

部署就到此结束了。

更新日志

  • 2021年3月23日:

    • PushPlus功能波动,更换成钉钉机器人通知(钉钉机器人密钥获取请自行参考官方文档)

    • 修复接口错误,默认配置为宁波大学,其他大学请自行在index.py中设定

    设定办法:

    1. 访问 https://mobile.campushoy.com/v6/config/guest/tenant/list 获取本校id
    2. 访问 https://mobile.campushoy.com/v6/config/guest/tenant/info?ids=学校id
    3. 获取idsUrlampUrlampUrl2填入index.py
    4. login_url请自行设定
  • 2021年1月30日:

    • Serverchan近期服务不稳定,将微信通知改成更稳定的PushPlus
  • 2021年1月28日:

  • 修复离校签到改成常规签到了,已经修复,下载新的index.py替换原来的index.py即可,配置文件config.yml不需要变动。

  • 2021年1月27日:

    • 移除了冗余代码,适配了宁波大学的校外每日签到任务;
    • 修复了今日校园更换接口导致原有接口失效的问题;
    • 修复了今日校园修改生成算法的密钥导致Cpdaily-Extension失效的问题;
    • 移除已失效的邮件通知功能,改为微信通知,需要调用Serverchan,配置方法详见注释;
    • 完善了容错机制,增加了两处可能产生错误之处的告警通知;
    • 完善了请求方式,不采用强制SSL;
    • 完善了日志记录,去除了SSL警告;
    • 完善了配置文件config.yml的注释,对小白更友好。

最后,说几句闲话:

想起之前一位从事信息安全行业的朋友说过的话:通常给自己的代码做安全,不会使用强度最大的加密方法(不要试图一劳永逸),而是会选用中等强度的加密方式,并且不定时地更换加密算法,以此来增加逆向的成本而不仅仅是增加逆向的难度。

至于为何不再重构去年的代码了,因为今日校园的工程师为了刷KPI(为了让你们自己打卡),也在不定时地维护系统(更换打卡的接口)。想来无非也是以上的道理。今日校园升级版本后,抓包有了一定的门槛(需要用到基本的计算机网络知识和一定的逻辑分析能力。当然难度也不是非常非常大,相信在座的各位只要是有学习过相关的知识,花费一定的时间(也许是两个小时,也许是两天…),也可以自己从头开始写一个打卡脚本。

可以,但没必要。毕竟,去年我是亲历者。

所有除了感情以外的事情,切记权衡成本和收益。如有必要,及时止损。

疫情还没有彻底结束,大家一定要做好防范措施,如果有接触高危地区高危人群,也请及时报告。这是你的责任,也是你的义务。

最后,祝每一个看到这里的朋友,新年快乐❤️!