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