使用Github Action自动填写疫情通

西电晨午晚检一天三次,通过企业号功能进行填写。实际上,西电企业号大部分功能是以网页模式工作的,通过构造connection发送合适的request,设置计划按时间自动运行,即可完成自动填写。

1、原理分析

打开晨午晚检页面,复制链接,得到实际的网页地址:https://xxcapp.xidian.edu.cn/site/ncov/xidiandailyup

在浏览器打开后发现会重定向到登录页面:https://xxcapp.xidian.edu.cn/uc/wap/login

一般来说,登录一次之后,会保留一段时间的cookies,我们要做的就是模拟一次登录,获得相应的connection,随后再次向晨午晚检网页发送request

2、登录过程

[TODO]

3、使用Python

  • 准备

Python中有很多与网络相关的库,例如scapy。在这里我们直接使用requests库模拟http的request请求。

首先下载requests库:pip install requests

随后导入:import requests

由于填写的信息是以json形式post的,因此要用到json库格式化信息:import json

  • 数据处理

提前编辑好各个字段:是否在校(sfzx),体温(列表形式,对应数字),区域(高德地图API)等

  1. {
  2. "sfzx": "1",
  3. "tw": "1",
  4. "area": 根据实际情况填写,Unicode编码,
  5. "city": 同上,
  6. "province": 同上,
  7. "address": 同上,
  8. "geo_api_info": 高德地图APIUnicode编码,
  9. "sfcyglq": "0",
  10. "sfyzz": "0",
  11. "qtqk": "",
  12. "askforleave": "0"
  13. }

可以将其保存为单独的json文件,再使用json.load导入

  • 登录

首先新建一个requests.Session,使用登录接口,post用户名和密码,获得登陆结果

  1. conn = requests.Session()
  2. result = conn.post(
  3. url="https://xxcapp.xidian.edu.cn/uc/wap/login/check",
  4. data={'username': uname, 'password': upswd}
  5. )
  6. if result.status_code != 200:
  7. print('Failed to login.', result.status_code)
  8. exit()
  • 提交数据

使用上面新建的conn,再次向晨午晚检接口post数据,并保存新的respond

  1. result = conn.post(
  2. url="https://xxcapp.xidian.edu.cn/xisuncov/wap/open-report/save",
  3. data=data
  4. )
  5. if result.status_code != 200:
  6. print("Error.", result.status_code)
  7. exit()
  • 验证结果

查看respond传回的消息,判断是否成功

  1. rjson = json.loads(result.text)
  2. print(rjson['m'])

Github Action

新建仓库上传配置好的数据和代码,就可以使用Github Action帮我们自动完成任务了。在repository页面上点击Action,选择set up a workflow yourself 来自定义任务

Github Action每次执行时,实际上是使用了一台新的虚拟机执行任务,因此需要在yml文件内完整地写出从一个新系统到代码启动所需要执行的全部步骤

  1. name: Daily Check In
  2. on:
  3. schedule:
  4. - cron: '0,30 0,5,11 * * *'
  5. # UTC时间,分别对应了北京时间的8点、13点、19点的整点和30分
  6. jobs:
  7. sign_in:
  8. runs-on: ubuntu-latest
  9. # 定义系统类型,这里选择Ubuntu
  10. steps:
  11. - name: '[Prepare] Code Check'
  12. uses: actions/checkout@v2
  13. # 从该仓库clone代码到虚拟机
  14. - name: '[Prepare] Set python'
  15. uses: actions/setup-python@v1
  16. # 安装python
  17. with:
  18. python-version: '3.x'
  19. - name: '[Prepare] Install Dependencies'
  20. run: |
  21. python -m pip install --upgrade pip
  22. python -m pip install --upgrade requests
  23. # 安装需要的python库
  24. - name: '[Final Main] Check In'
  25. run: |
  26. python submit.py
  27. # 执行代码

有关详细的Github Action yml文件格式,可以在官方文档中找到解释:https://docs.github.com/cn/actions

使用Github Action自动填写疫情通的更多相关文章

  1. hexo配合github action 自动构建(多种形式)

    已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...

  2. 利用.NET 5和Github Action 自动执行米游社原神每日签到福利

    背景 众所周知,原神的签到福利是需要下载app才可以领取的.但像我这种一般不怎么刷论坛的人,每天点开app签到很麻烦. 很多大佬利用Github的Action自动执行的模式,实现了很多好东西.加上.n ...

  3. 5 分钟教你快速掌握 GitHub Actions 自动部署博客

    自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...

  4. github action 实现CI/CD

    两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...

  5. 利用Github Action和.Net 5 自动执行米游社原神每日签到福利

    GenshinDailyHelper 原神的签到福利是需要单独下载APP进行才可以领取,并且每天需要打卡,虽然奖励并不是很可观,但有一些摩拉,食材和可观的经验书累计起来还是挺有吸引力的.可能本身不怎么 ...

  6. 使用GitHub Action进行打包并自动推送至OSS

    GitHub Action 是 GitHub 于 2018 年 10 月推出的一个 CI\CD 服务. 官方文档:https://docs.github.com/cn/actions CI\CD 持续 ...

  7. 你知道什么是 GitHub Action 么?

    本文是 GitHub Action 的入门教程,如您已有相关使用经验可以直接关掉. GitHub Action 是 GitHub 于 2018 年 10 月推出的一个 CI\CD 服务. 之前一直都是 ...

  8. 用 GitHub Action 构建一套 CI/CD 系统

    ​ 缘起 Nebula Graph 最早的自动化测试是使用搭建在 Azure 上的 Jenkins,配合着 GitHub 的 Webhook 实现的,在用户提交 Pull Request 时,加个 r ...

  9. 使用github action发布hexo博客到云服务器

    目录 搭建Hexo博客 安装主题hexo-theme-bamboo 修改博客名称等信息 添加github action发布 1. 在github中创建自己的博客仓库 2. 设置Secrets 3. 在 ...

随机推荐

  1. TestNG--@Factory

    原文地址:http://blog.csdn.net/wanghantong TestNg的@Factory注解从字面意思上来讲就是采用工厂的方法来创建测试数据并配合完成测试 其主要应对的场景是:对于某 ...

  2. 【译】System.Text.Json 的下一步是什么

    .NET 5.0 最近发布了,并带来了许多新特性和性能改进.System.Text.Json 也不例外.我们改进了性能和可靠性,并使熟悉 Newtonsoft.Json 的人更容易采用它.在这篇文章中 ...

  3. WEB前端开发--1(Web前端开发综述)

    Web前端开发 Web--Web系统      前端--网页上为用户呈现的部分   开发--编写代码 1. 前端与后端 前端:网页上为用户呈现的部分 后端:与数据库进行交互,完成数据存取 2. 网站与 ...

  4. FLink迟到数据的处理之三

    Flink迟到的数据更新窗口计算结果,窗口销毁后的迟到数据输出到测输出流 主程序: //TODO 使用迟到的数据更新窗口的计算结果 public static void main(String[] a ...

  5. Java中的多线程你只要看这一篇就够了(引用)

    引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个 ...

  6. 大话devops

    一.敏捷的局限性的促使devops诞生 敏捷的局限性:敏捷只注重开发阶段的敏捷,未涉及到整个产品生命周期流程其他环节导致采用敏捷开发流程后效果不明显. devops成为企业数字化转型的助推器,扮演基础 ...

  7. 从零开始实现一个分布式RPC框架

    该rpc框架是一个mini版的dubbo.学习rpc之前,建议先了解NIO,Netty和Dubbo等知识.请移步网络编程 前言:(借用阿里大佬的一段话) 为什么要自己写一个RPC框架,我觉得从个人成长 ...

  8. 卡特兰数是我见过第二神奇的东西//下一个是stirling数列

    自从上次斐波那契的总结后,今天有一次遇上了正宗卡特兰数. 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, ...

  9. SpringCloud--feign的配置加载

    spring cloud feign我们使用 @FeignClient注解,其中有几个核心属性: @AliasFor("name") String value() default ...

  10. 抓取并解密HTTPS流量

    WireShark   Wireshark解密TLS数据流,从网上已有资料来看,主要是两种方式:一是服务端私钥直接解密,二是使用SSLKEYLOGFILE获取握手过程中的会话密钥信息进行解密.   这 ...