python_自动体温打卡

由于学校每天都要体温打卡,填体温还限制时间段,0|==|_,所以整点py配合linux的crontab,实现自动打卡;
1,抓包分析
发现自动打卡需要登录,输入账号密码即可;

抓登录页面的包分析发现是以post方式提交数据,并且cookie字段携带账号,JSESSIONID等信息:
在这里插入图片描述

登录成功后发现三个体温填写栏,并且对体温填写做了时间校验:
在这里插入图片描述
点击提交按钮,再次抓包分析:
发现数据包中含有和登录数据包中一样的cookie信息,并且以post方式提交json格式的数据,数据中含三个最主要的体温数据morTem,noonTem,eveTem 和 报告的提交时间 reporttime;
在这里插入图片描述如果数据包无误,提交成功后返回200,并提示修改成功:
在这里插入图片描述
代码实现逻辑:
1,只要登录数据包中的cookie值和登录后的数据包中cookie值一致,就可以在py代码上省去登录步骤;
2,三个体温变量对应三个时间段去填写,使用linux的crontab设置三个定时任务实现即可;
3,reporttime为当天填写体温日期,年-月-日,使用py的时间函数即可;

实现代码如下(仅供参考学习py使用):

#coding=utf-8
import requests
import json
import random
import time

# ==== cookie原始数据;全局变量==== 
cookie = [
    "studentCode=11111(账号); IDNo=1(密码)",
    "studentCode=22222; IDNo=3",
    "studentCode=33333; IDNo=2"
    ]
studentCode = ''
IDNo = ''
JSESSIONID = 'djfasjfoijaoifjisajfirs'

# ==== 简单处理数据;提取账号,密码 ====
def get_data(cookie):
    global studentCode,IDNo
    cookie = cookie.split(';')
    studentCode = cookie[0].split('=')[1]
    IDNo = cookie[1].split('=')[1]
    #JSESSIONID = cookie[2].split('=')[1]
    #print(studentCode,IDNo,JSESSIONID)

#===测试登录:此模块可以省略===
def login():
    url = "登陆URL"
    headers = {
    
    
        "Host": "www.xxx.com",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0",
    "Accept": "*/*",
    "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
    "Accept-Encoding": "gzip, deflate",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "X-Requested-With": "XMLHttpRequest",
    "Content-Length": "40",
    "Origin": "https://www.xxx.com",
    "Connection": "close",
    "Referer": "https://www.xxx.com/xxx/xxx",
    "cookie": "studentCode=1111; IDNo=1; JSESSIONID=adljasijfdoijasfoi"
        }

    data = "studentCode=111&IDNo=1"

    response = requests.post(url,data=data,headers=headers)

    print(response.text)

#login()

#=== 体温填写====
def inp(studentCode,IDNo,JSESSIONID):
    # 体温填写URL
    url2 = "https://www.xxx.com/xxx" 
    # http数据包头部信息,含cookie免登陆步骤
    headers = {
    
    
            "Host": "www.xxx.com",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0",
            "Accept": "*/*",
            "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
            "Accept-Encoding": "gzip, deflate",
            "Content-Type": "application/json",
            "X-Requested-With": "XMLHttpRequest",
            "Content-Length": "499",
            "Origin": "https://www.xxx.com",
            "Connection": "close",
            "Referer": "https://www.xxx.com/xxx",
            "cookie": "studentCode={0}; IDNo={1}; JSESSIONID={2}".format(studentCode,IDNo,JSESSIONID)
            }

    # === 随机生成体温 ====
    e = 36
    d = int(random.uniform(0.4,0.7) * 10) /10
    #print(a,b,c)
    
    # === 获取当天时间 ====
    times = time.strftime("%Y-%m-%d",time.localtime())
    print(times)
    # http数据包请求体,体温填写
    data = {
    
    "studentCode":"{}".format(studentCode),
            "classNo":"xxx",
            "departmentCode":"02",
            "depName":"xxx",
            "acaID":"1",
            "bodystatus":"正常",
            "animalHeat": None,
            "address":"xxx学校",
            "isContactHubeiBack":"0",
            "isContactPatient":"0",
            "othercase":"",
            "reporttime":"{}".format(times),
            "noonTem":"%s"%str(e+d),
            "illsymptom": None,
            "quarantine": None,
            "quarantinePlace": None,
            "outStartTime": None,
            "outEndTime": None,
            "vehicle": None,
            "trainNumAndseatNum": None
            }
    # 发送post请求,请求体为json格式数据
    response = requests.post(url2,headers=headers,json=data)
    # 返回数据内容编码自适应
    response.encoding = response.apparent_encoding
    # 打印输出结果
    print(response.text)

# 批量打卡
for i in cookie:
    get_data(i)
    #print(studentCode,IDNo,JSESSIONID)
    inp(studentCode,IDNo,JSESSIONID)

linux crontab设置定时任务:
crontab -l -u root【或用户名】 #列出指定用户的定时任务
crontab -e #设置当前用户的定时任务
记得每次设置完定时任务需要重启crontab
systemctl restart cron

#各个参数对应的含义
# .---------------- 分(0 - 59)
# |  .------------- 时(0 - 23)
# |  |  .---------- 天 (1 - 31)
# |  |  |  .------- 月(1-12)
# |  |  |  |  .---- 周 1-7
# |  |  |  |  |
  *  *  *  *  *   执行任务的命令/command

将py代码复制三份,变动三个体温变量名,设置三个定时任务,使用py3运行即可(注意linux时区问题 ,date查看时区,一般时区为CST);
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46635165/article/details/121114884
今日推荐