定时签到《我在校园》健康打卡

2021-01-21

学校需要在《我在校园》打卡,作为一个懒人,当然是要研究下如何实现偷懒

一、抓包

登录pc微信,打开小程序我在校园。同时打卡Fiddler,可以看到如图信息,其中包含了token字段(实测,这个token有效期只有4天),然后点开健康打卡,填充数据并提交,抓包到post的数据和url(由于每天只能一次,这里就没有post的抓包图片)

在这里插入图片描述

二、实现思路

1.对post的data数据处理

对data中的温度实现随机,将地理位置邮编填入data中

data ={
            'answers':'["0", '+str(round(random.random(), 1) + 36)+','+str(round(random.random(), 1) + 36)+','+str(round(random.random(), 1) + 36)+']',
            'country': '中国',
            'city': '宜昌市',
            'district': '夷陵区',
            'province': '湖北省',
            'township': '小溪塔街道',
            'street': '',
            'areacode':443306
        }

2.实现带token的post请求

在post请求的headers中加入token字段,并填写对应的内容

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.设置定时运

def run():
    while True:
        current_time = datetime.now().hour
        if (current_time == 10 ):
            daka()
        	time.sleep(3600*24)

if __name__ == "__main__":
    run()

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

在这里插入图片描述

三、代码设计

#-*- coding: UTF-8 -*- 
import requests
import random
from datetime import datetime
import time
import zmail

url = "https://student.wozaixiaoyuan.com/health/save.json"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat',
    'host': 'student.wozaixiaoyuan.com',
}

tokens = {
    '1':'c90614f0-2fa6-45aa-a79b-f2a7ea91228e',
}

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

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


def daka():
    text = ''
    for i in tokens:
        headers['token'] = tokens[i]
        payload ={
            'answers':'["0", '+str(round(random.random(), 1) + 36)+','+str(round(random.random(), 1) + 36)+','+str(round(random.random(), 1) + 36)+']',
            'country': '中国',
            'city': '宜昌市',
            'district': '夷陵区',
            'province': '湖北省',
            'township': '小溪塔街道',
            'street': '',
            'areacode':443306
        }
        # requests.packages.urllib3.disable_warnings()  , verify=False
        response = requests.post(url, headers=headers, data=payload )
        if (response.status_code == 200):
            text += i + ">>>>打卡>>>>" + response.text + '\n'
            time.sleep(round(random.random(), 1)*10)
    send_email(text)

def run():
    while True:
        current_time = datetime.now().hour
        if (current_time == 10 ):
            daka()
        	time.sleep(3600*24)

if __name__ == "__main__":
    run()