zoukankan      html  css  js  c++  java
  • 使用Github Action自动填写疫情通

    使用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)等

    {
      "sfzx": "1",
      "tw": "1",
      "area": 根据实际情况填写,Unicode编码,
      "city": 同上,
      "province": 同上,
      "address": 同上,
      "geo_api_info": 高德地图API,Unicode编码,
      "sfcyglq": "0",
      "sfyzz": "0",
      "qtqk": "",
      "askforleave": "0"
    }
    

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

    • 登录

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

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

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

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

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

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

    Github Action

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

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

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

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

  • 相关阅读:
    配置secondarynamenode主机名masters
    配置secondarynamenode主机名masters
    Redis 数据备份与恢复
    Redis 数据备份与恢复
    以太坊:Go、Java、Python、Ruby、JS客户端介绍
    以太坊:创建安全多签名钱包及高级设置
    以太坊:导入预售钱包,更新、备份、恢复账号
    以太坊客户端的选择与安装
    以太坊:C++客户端的安装与定制(一)
    2019最受欢迎数据库:MySQL居首PostgreSQL第二Oracle位列第八
  • 原文地址:https://www.cnblogs.com/soowin/p/13461451.html
Copyright © 2011-2022 走看看