某大学健康打卡自动签到

2021-01-21

由于之前那篇文章,不少懒人朋友找到了我,想让我帮忙解决一下

一、抓包

这里是抓取了大学的健康签到网址,并进行分析

登录接口

签到接口

这里也是对签到内容进行一次模拟,然后抓包,取得相应数据

二、实现思路

1.实现登录

由于这个签到是在该校官网,所以得先去测试下登录接口,发现登陆后会返回set-cookie,并对之后的数据进行请求,这里便选择使用Session来实现会话保持(由于是帮朋友写的,前面没有学号和密码,就只能随便数据账号密码进行抓包测试,发现密码利用了 md5编码) 代码实现:

def login():
    header = {
        "User-Agent": "Mozilla/5.0"
    }

    data = {
        "username": '学号',
        "password": hashlib.md5(b'密码').hexdigest()
    }

    loginUrl = 'http://xgpt.hbmu.edu.cn/website/login'

    req = session.post(loginUrl, headers=header, data=data)

2.实现签到

这里的data数据是通过之前模拟填写的数据抓包得到的,具体内容识实际情况而定

def origin(req):
    t = int(round(time.time()*1000))
    postURL= f'http://xgpt.hbmu.edu.cn/content/student/temp/zzdk?_t_s_={t}'
    header = {
        "User-Agent":'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
    }
    data = {
    'dkdz':'湖北省宜昌市西陵区列电路6 -、8 -、10号',
    "dkly":'baidu',
    "dkd":"湖北省宜昌市",
    "jzdValue":"420000, 420500, 420581",
    "jzdSheng.dm":420000,
    "jzdShi.dm":420500,
    "jzdXian.dm":420581,
    "jzdDz":"湖北省宜都市*******",
    "jzdDz2":"湖北省宜都市*****",
    "lxdh":手机号,
    "sflx":1,
    "twM.dm":"01",
    "tw1":"[35.0~37.2]正常",
    "yczk.dm":"01",
    "yczk1":"无症状",
    "brStzk.dm":"01",
    "brStzk1":"身体健康、无异常",
    "brJccry.dm":"01",
    "brJccry1":"未接触传染源",
    "jrStzk.dm":"01",
    "jrStzk1":"身体健康、无异常",
    "jrJccry.dm":"01",
    "jrJccry1":"未接触传染源",
    "bz":"",
    "operationType":"",
    "Create":"",
    "dm":""
    }
    r = session.post(postURL ,headers = header ,data=data)

3.利用zmail进行邮件的发送

关于zmail邮件发送,主要就是需要一个发送者邮箱,并开启pop3等,网易配置可参考我的另一篇文章监测小说更新状态并发送邮箱 zmail代码如下:

import zmail

def send_email(text):
    # 你的邮件内容
    mail_content = {
        'subject': 'Success!',  # 随便填写
        'content_text': text,  # 随便填写
    }

    server = zmail.server('发送者邮箱', '发送者邮箱客户端授权码')
    # 发送邮件
    server.send_mail('接收者邮箱', mail_content)

4.设置定时运

if __name__ == '__main__':
    while True:
        current_time = datetime.now().hour
        if (current_time == 7 ):
            login()
        	time.sleep(3600*24)

5.将代码上传到服务器,并后台运行

在这里插入图片描述

三、详细代码

import requests
import hashlib
import time
import logging
import os.path
import zmail
from datetime import datetime
session = requests.Session()


def login():
    header = {
        "User-Agent": "Mozilla/5.0"
    }

    data = {
        "username": '学号',
        "password": hashlib.md5(b'密码').hexdigest()
    }

    loginUrl = 'http://xgpt.hbmu.edu.cn/website/login'

    req = session.post(loginUrl, headers=header, data=data)
    origin(req)

def origin(req):
    t = int(round(time.time()*1000))
    postURL= f'http://xgpt.hbmu.edu.cn/content/student/temp/zzdk?_t_s_={t}'
    header = {
        "User-Agent":'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
    }
        data = {
    'dkdz':'湖北省宜昌市西陵区列电路6 -、8 -、10号',
    "dkly":'baidu',
    "dkd":"湖北省宜昌市",
    "jzdValue":"420000, 420500, 420581",
    "jzdSheng.dm":420000,
    "jzdShi.dm":420500,
    "jzdXian.dm":420581,
    "jzdDz":"湖北省宜都市*******",
    "jzdDz2":"湖北省宜都市*****",
    "lxdh":"手机号",
    "sflx":1,
    "twM.dm":"01",
    "tw1":"[35.0~37.2]正常",
    "yczk.dm":"01",
    "yczk1":"无症状",
    "brStzk.dm":"01",
    "brStzk1":"身体健康、无异常",
    "brJccry.dm":"01",
    "brJccry1":"未接触传染源",
    "jrStzk.dm":"01",
    "jrStzk1":"身体健康、无异常",
    "jrJccry.dm":"01",
    "jrJccry1":"未接触传染源",
    "bz":"",
    "operationType":"",
    "Create":"",
    "dm":""
    }
    r = session.post(postURL ,headers = header ,data=data)
    send_email(r.text)
    
def send_email(text):
    # 你的邮件内容
    mail_content = {
        'subject': 'Success!',  # 随便填写
        'content_text': text,  # 随便填写
    }

    server = zmail.server('发送者邮箱', '发送者邮箱客户端授权码')
    # 发送邮件
    server.send_mail('接收者邮箱', mail_content)
    
if __name__ == '__main__':
    while True:
        current_time = datetime.now().hour
        if (current_time == 7 ):
            login()
        	time.sleep(3600*24)