声明:仅供交流学习
该项目基于python的request库和bs4库实现上海大学的自动报送。可部署于服务器或者GitHub Action来实现每天自动报送。
- oneReport.py 用于离校以后当天的每日一报;
- twoReport.py 用于在校生当天的每日两报;
- delayReport.py 用于一次性补报之前日期。
以上脚本文件都可单独运行,可根据需要选择。
-
把代码clone到本地
https://github.com/zsksmhq/dailyReport.git
-
安装依赖库(见requirements.txt)
-
运行OneReport.py进行每日一报当日报送
python twoReport.py 学号 密码 详细地址
详细地址需要提供所在地的省、市、县/区、具体住址,用逗号分隔(注意是英文逗号,省份不要加省字) 例如:
python twoReport.py 1812**** 12345678 安徽,合肥市,肥东县,肥东一中
-
运行twoReport.py进行每日两报当日报送
python twoReport.py 学号 密码
github action 实现自动发邮件需要一个配置SMTP服务的邮箱(qq邮箱、163邮箱等)。以配置163邮箱为例,先登录邮箱,点击设置,选择POP3/SMTP/IMAP,然后开启SMTP服务。 开启服务后会生成一个专用授权密码,将该密码记录下来,用于下面的Secrets配置。
进入自己 fork 的仓库,点击 Settings-> Secrets-> New Secrets, 添加 1 个 Secrets,其名称为STUDENTID
,值为自己的学号。它们将作为配置项,在应用启动时传入程序。然后再添加一个Secrets,PASSWORD
值为自己的密码。
如果需要发送邮件的话还需要配置下面三个 Secrets:
MAIL_USERNAME
自动发邮件的邮箱号MAIL_PASSWORD
自动发邮件的邮箱授权密码,就是开通邮箱STMTP服务时记录下来的密码MAIL_BOX
接受邮件的邮箱号
如果为每日一报的话还需要配置所在地址的 Secrets:
LOCATION
所在地的详细地址(需要提供所在地的省、市、县/区、具体住址,用逗号分隔)s 例如:安徽,合肥市,肥东县,肥东一中 注意:分隔符为英文逗号,省份不需要加省字
都配置好后,请手动开启 Actions,执行一次工作流,验证是否可以正常工作,操作步骤如下图所示:
运行结束后,可查看运行日志:
- oneReport 默认是每天0整触发运行;
- twoReport 默认是每天0点和16点整触发运行;
可以根据需要选择对应的工作流运行。
因为github action自身的原因,每次运行会有半个小时左右的延迟。另外如果想要设置自己的运行时间,详见下面常见问题。
每日任务执行的时间,由.github/workflows中的oneReport.yml或twoReport.yml中的cron表达式指定,每日两报默认为每日的0点整和16点:
schedule: # 定时触发
# cron表达式,时区是UTC时间,比我们早8小时,如下所表示的是16表示的是每天0点0分
- cron: '0,0 16,8 * * *'
若要修改为自己指定的时间执行,有如下两种方式:
- 方法一:修改yaml文件中的cron表达式 我们可以直接修改上述该文件中的cron表达式,然后提交。
个人不建议这么做,因为以后更新要注意冲突与覆盖问题,建议使用下面的方法二。
-
方法二:添加 GitHub Environments 并设置延时 v1.1.3及之后版本,支持通过添加GitHub Environments来设置延时运行,即在每日0点整触发 Actions 后,会再多执行一个延时操作,延时时长可由我们自己设置。
比如想设置为每天8点执行,只需要将这个延时时常设置为480分钟(8个小时)即可。方法如下:
- Ⅰ. 找到 Production Environments 运行完twoReport.yml 之后,在 Settings ——> Environments 中会自动多出一个名为 Production 的环境,如下图所示:
- Ⅱ.设置延时时长 勾选 Wait timer,并填写延时时长,单位为分钟,如下图所示:
设置成功后,再次运行 Actions 会发现触发后会自动进入倒计时状态,等倒计时结束(这里我设置的是1分钟)后才会真正运行之后的内容,如下图所示:
之后要是不需要每天填报了,那进入setting->action->选择Disable Actions for this repository。该仓库的所有的工作流将不再运行。 如果只停止一个工作流,可以直接在 Actions 中设置:👇
dailyReport:.
│ delayReport.py 补报脚本
│ oneReport.py 每日一报脚本v2
│ README.md 说明文档
│ request2json.py 将截获的post表单转成json格式
│ requirements.txt 安装依赖
│ twoReport.py 每日两报脚本
│
├─.github
│ └─workflows
│ oneReport.yml 每日一报工作流
│ twoReport.yml 每日两报工作流
│
├─data
│ data.json 从报送页面截获的body转成的表单数据
│ F_State.json 表单数据中的状态数据(解码后的数据)
│ requestBody.txt 从报送页面截获的body
│
├─images 文档图片