学校需要在《我在校园》打卡,作为一个懒人,当然是要研究下如何实现偷懒
一、抓包
登录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()