python实现自动健康打卡
经过试验成功打卡两天,在此记录下
数据获取和提交
首先打卡本质上就是在一个网址上提交了表单数据给校园服务器,所以在第一天尝试提交数据,查看提交数据格式和网址
https://wfw.scu.edu.cn/ncov/wap/default/save,保持登录状态,获取save下的表单数据和header
# 数据
save_url = 'https://wfw.scu.edu.cn/ncov/wap/default/save'
headers = {
# 你的请求头(包含referer、cookie、uagent等重要信息)
}
接下来对表单分析,发现有一项必须每天变化,就是打卡日期,格式是20220302这样的
引入time库,采用如下函数实现格式化日期
new_date = time.strftime('%Y%m%d', time.localtime(time.time()))
form_data = {
# 你的表单信息,日期那一栏值替换为new_date
}
然后就可以使用requests库进行post data
response = requests.post(url=save_url, headers=headers, data=form_data).text
print('打卡信息:' + response) # 查看打卡结果信息
可以看到正常打卡信息中存在提示“操作成功”
{e: 0, m: "操作成功", d: {}}
邮箱提醒打卡成功
因为想要实现邮件提醒打卡成功,所以导入了python自带的邮件相关库
import smtplib
from email.mime.text import MIMEText
设置相关信息
MAIL_USER = '自己的邮箱'
MAIL_PWD = '授权码' # 需要开启邮箱的STMP服务
MAIL_TO = '自己的邮箱'
函数实现发送邮件 参考:使用Python实现平台自动打卡 - 知乎 (zhihu.com)
# 从网上找的代码并改进
def mail(mail_text):
# 设置邮件内容
msg = MIMEText(mail_text)
# 设置邮件主题、发送方和接收方
msg['Subject'] = "每日健康打卡通知"
msg['From'] = MAIL_USER
msg['To'] = MAIL_TO
# 发送邮件
send = smtplib.SMTP_SSL("smtp.qq.com", 465)
send.login(MAIL_USER, MAIL_PWD)
send.send_message(msg)
# 退出邮件
send.quit()
if '操作成功' in response:
mail_text = '今日已打卡,哦耶!'
mail(mail_text)
实现每日执行
最开始想要用windows的任务计划程序来实现每天执行脚本,费了老大劲设置,就跟这个作者弄得差不多,结果发现能执行,但是必须的开着机,而且很不稳定(确实,你关机了,笔记本还能运行程序就怪了)
然后我就突然想到不是有服务器吗,放那吃灰呢,搁那顶上不就行了嘛,然后还真可以
要设置宝塔面板每日计划,参考:(2条消息) 宝塔运行python文件(极简)_luxuncang的博客-CSDN博客_宝塔运行py文件
按着这个我就搞定了,设置每天7点打卡(我怕不是每天第一个打卡的,嘿嘿