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 = '自己的邮箱'

设置STMP

函数实现发送邮件 参考:使用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的任务计划程序来实现每天执行脚本,费了老大劲设置,就跟这个作者弄得差不多,结果发现能执行,但是必须的开着机,而且很不稳定(确实,你关机了,笔记本还能运行程序就怪了)

win10的任务计划程序

然后我就突然想到不是有服务器吗,放那吃灰呢,搁那顶上不就行了嘛,然后还真可以

要设置宝塔面板每日计划,参考:(2条消息) 宝塔运行python文件(极简)_luxuncang的博客-CSDN博客_宝塔运行py文件

按着这个我就搞定了,设置每天7点打卡(我怕不是每天第一个打卡的,嘿嘿

最后修改:2022 年 03 月 02 日
如果觉得我的文章对你有用,请随意赞赏