Skip to content
This repository has been archived by the owner on Dec 9, 2022. It is now read-only.

📆Automatically complete XMU's daily health report, use at your own risk.

License

Notifications You must be signed in to change notification settings

Cloudac7/auto-daily-health-report

 
 

Repository files navigation

Auto Daily Health Report

我们正式迈向结束疫情生活的道路!

用最省力的方式完成 厦门大学·每日健康打卡 (Daily Health Report)

由于原项目已迁移到 Rust实现, Python 实现不再维护。因此本项目将继续提供对 Python 版本的支持,并将重构部分代码,根据实际使用情况适当增加功能。 这里特别感谢原作者 @kirainmoe 的贡献。

Table of Contents

这是什么?

这是一个 Python 程序,它可以模拟登录 厦门大学学工系统,并自动完成 每日健康打卡。截至 2021 年 3 月,这段程序已经稳定帮作者打卡了十个月。

它的原理是获取你的统一身份认证账号,向学工系统服务器获取每日的健康打卡表单,然后向服务器发送打卡的 POST 请求。

更新日志

2022/04/02 对Github Workflow进行修改,支持通过WebVPN打卡,以免在家办公期间EC出现频繁的异地登陆。暂时删除了频繁失效的检验机制。

2022/02/19 重构Workflow、App等处代码,通过使用Dynaconf,同时支持本地配置文件和环境变量的写法。在Workflow中使用EasyConnect VPN替换了默认配置以免被屏蔽。

2021/10/19 使用pycryptodomex替换了使用ExecJS调用CryptoJS进行ASE加密的逻辑, 并增加了Docker支持

2021/6/25: 更新了反代验证,现在必须要设置 --vpn-username 和 --vpn-password 才可以使用本程序。

2021/3/30: 更新了通过 WebVPN 访问学工系统的支持,请查看文档以了解使用方法;但未对 GitHub Workflow 进行修改。

2020/12/27: 更新了对统一身份认证系统登录提交信息时 AES 加密的支持

免责声明

此项目仅供学习/交流/健忘症玩家使用;若产生任何后果(包括但不限于被学院或辅导员橄榄、因学工服务器接口修改等原因中断打卡等)请自负。也请对他人的健康负责,认真如实填报健康情况。

快速设置自动打卡

  • 对于普通用户,推荐通过 GitHub Actions 进行简单设置后打卡,具体使用方法详见 使用 GitHub Actions 实现每日自动打卡

  • 对于拥有独立服务器 (VPS) 的用户,可以选择使用 Linux 计划任务完成打卡,具体设置方法详见 在本地 / 服务器使用使用 Linux 计划任务 (Crontab) 自动打卡

  • 如果你比较喜欢用Docker, 也可以使用Docker容器自动打卡, 使用方法:

    docker run -d --name daily-report \
    -e XMU_USERNAME="你的学工号" \
    -e XMU_PASSWORD="你的密码" \
    eric107/xmu-daily-report:latest

    你也可以自己构建属于你自己的Docker镜像

在本地 / 服务器使用

此程序基于 Python 3 和 Node.js 环境,需要 requestsBeautiuflSoup, lxml 库支持以发送网络请求、解析网页。

使用此程序要求你具有一些基础的运维技能,如使用基础的终端命令。同时确保你的电脑已经安装了 Python 3.

获取源代码

第一步,首先使用 git clone 或从右上角的 Download Zip 获取程序源代码。

如果你的电脑已经安装了 Git,可以使用下面的命令拉取源代码:

git clone /~https://github.com/charlieJ107/auto-daily-health-report

安装依赖

使用终端 / 命令提示符 / Powershell 切换到项目目录下:

cd auto-daily-health-report

使用 pip 安装依赖:

pip install -r requirements.txt -i https://pypi.douban.com/simple

执行打卡

最简单的使用方法是运行 app.py ,同时输入厦门大学统一身份认证账号、密码和操作,执行打卡:

python app.py username password action

其中 usernamepassword 分别指代你的学工号和统一认证密码、vpnpass 指代你的 WebVPN 密码; action 表示你要执行的动作是打卡 (check) 或查询 (query)。

举个例子,如果你的学工号是 1145141919810,密码是 123456

如果你要执行打卡,则执行以下命令:

python app.py 1145141919810 123456 check

如果你要查询今天是否已经打卡或最近的打卡记录,则执行以下命令:

python app.py 1145141919810 123456 query

Tips: 如果是 macOS 用户,默认 python 指向的是系统自带的 Python 2.8 版本,请将上面的 python 替换为 python3

通过 WebVPN

出于安全原因,学校会在某些特殊时段关闭学工系统和统一身份认证系统的公网访问。因此,如果有需要,你也可以通过 WebVPN 系统访问打卡程序,而不需要在关闭公网访问时挂 VPN 打卡:

# 通过 WebVPN:
# python app.py 用户名 密码 动作 --webvpn true --vpn-username VPN登录用户名 --vpn-password VPN或校园网密码

# for example:
python app.py 1145141919810 123456 check --webvpn true --vpn-username 1145141919810 --vpn-password 654321

搞定了~

快去学工系统健康打卡看看打卡成功了没有吧。如果你在表单的修改日志里看到了修改记录,那就说明程序打卡成功了。

高级使用方法

python app.py username password action
              [--webvpn] [true/false] [--vpn-username] [vpn_username] [--vpn-password] [vpn_password]

必须参数:
  username              统一身份认证用户名
  password              统一身份认证密码
  action                动作 (check: 打卡,query: 查询今日打卡情况)

可选参数:
  --webvpn {true,false}
                        是否通过 WebVPN 发送请求
  --vpn-username vpn_username
                        WebVPN 用户名
  --vpn-password vpn_password
                        WebVPN 密码

常见问题(FAQ)

Q: 把学工号和统一认证密码直接喂给这个程序,安全吗?

A: 这个程序不会储存你输入的任何用户名、密码或 Cookie, 也不会将获得和输入的用户名、密码、Cookie 等信息发送到除 *.xmu.edu.cn 之外的其它网站。因此在没有人窥屏你的电脑的情况下,你可以认为它是安全的。

Q: 我还是要每天运行一遍 app.py 打卡吗?有没有什么每天无人值守自动打卡的方法?

A: 本项目是 project-ami 的自动打卡功能的核心开源实现,每天自动打卡的功能仅为 AmiBOT 和 ueBOT 开放,本程序只提供了快速填写打卡表单的操作封装,程序并不直接提供每天定时自动打卡的功能。如果你需要自动打卡,请看下面的 打卡自动化 部分。
说白了,你只要想办法每天让 app.py 执行一次就可以,至于怎么做,就看你有多强了。

Q: 安装依赖的时候出错怎么办?

A: 在部分 Windows 10 的系统上,可能会发生 lxml 无法安装的情况,请到 Python Extension Packages for Windows 下载 lxml‑4.5.2‑cp39‑cp39‑win_amd64.whl 的二进制包,然后使用以下命令手动安装:

pip install lxml‑4.5.2‑cp39‑cp39‑win_amd64.whl

Q: 程序报错了怎么办?

A:当程序报错的时候有 90% 的可能是学工系统挂了,如果是这样的话只能稍后再试;剩下 10% 的可能是学工服务器接口修改,或程序出现了 BUG,请提供错误信息提 issue 告诉我。

Q: 用了这个程序但是没打上卡/中断连续打卡了怎么办?

A: 请向上看免责声明 :)

Q: 看了教程我还是不会用啊?你能帮帮我吗?

A: 那还是麻烦您每天自己打卡好了(无慈悲)。

打卡自动化

使用 GitHub Actions 自动打卡并通过 Server 酱推送结果

请参考 这篇教程 完成 GitHub Actions 的设置。

使用 Linux 计划任务 (Crontab) 自动打卡

参考源码根目录下的 auto-report.cron,编写 Crontab 规则,如:

30 7/24 * * * /usr/bin/python /path/to/app.py [username] [password] [action]

其中,30 7/24 * * * 表示定时任务的运行时间规则为每日的 7:30 执行程序打卡;/path/to/app.py 表示 app.py 的完整路径,[username] [password] [action] 则表示你的身份认证信息。

在 Linux 下使用以下命令激活定时任务:

crontab auto-report.cron

当然你也可以在本地使用Workflow打卡以获得更多功能支持(例如随机延迟)。

首先,注意到项目目录下的config.example.json,修改后缀去掉example,并修改其中的信息。以下对配置信息进行说明:

{
    "xmu_username": "统一身份认证用户名",
    "xmu_password": "统一身份认证密码",
    "use_webvpn": false,
    "vpn_username": "WebVPN 用户名",
    "vpn_password": "WebVPN 密码",
    "use_random": false,
    "random_zone": 3600,
    "report_type": "dingtalk",
    "dingtalk_webhook": "",
    "dingtalk_secret": ""
}

其中xmu_usernamexmu_password表示你的统一身份认证用户名(学号)和密码,vpn_usernamevpn_password表示WebVPN的用户名(学号)和密码。use_random表示开启随机延迟,如为true,请设置random_zone为随机延迟的范围(单位:秒),例如3600表示在程序运行后1h内随机时间点打卡。

report_type表示推送的类型,可以参考Github Actions打卡的说明对应设置。这里给出的选项适用于钉钉。

编写Crontab规则如下:

30 7/24 * * * cd /path/to/ && /usr/bin/python /path/to/workflow.py

许可证

auto-daily-health-report is a part of project-ami, and it is MIT Licensed.

About

📆Automatically complete XMU's daily health report, use at your own risk.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 98.1%
  • Dockerfile 1.9%