python我在校园自动打卡


原理为抓包token值模拟登录,再通过脚本将打卡数据post上传至服务器。

大致思路:腾讯云函数定时触发脚本,打卡状态通过QQ邮箱进行提醒。

 

一、Fiddler 抓包工具

1.安装

安装包下载: Fiddler 安装包和 Fiddler 证书生成器

阿里云盘地址:https://www.aliyundrive.com/s/7gtFaLxH7f5

两个文件都下载下来后,先双击 FiddlerSetup.exe 进行安装,另一个是证书生成器,暂时不用。

2.配置

打开 Fiddler ,点击工具栏中的 Tools → Options

 

 

点击 HTTPS 标签,勾选框住的三项,然后点击右边的 Actions,选择第二项,会弹出一个弹窗,点击确定,之后点击 OK 完成设置

 

 桌面上会有一个证书

 

 打开浏览器--->设置----->搜索证书

 

 

 

 点击“管理证书”,点击“导入”进入证书导入向导

 

 

 在桌面找到刚刚导出的证书文件,点一下证书文件,选择打开

 到这一部配置工作就完成了

3.抓包

接下来从微信电脑端打开我在校园小程序,然后打开日检日报或者健康打卡,会发现 Fiddler 中显示了很多内容,我们找到“student.wozaixiaoyuan.com”这一行,

双击打开,在右边选择“Headers”标签,复制三项内容 User-Agent(设备信息)、JWSESSION(作用相当于旧版的 Token)、Referer(学校信息)。这里建议将信息写入word    (与Token不同的是JWSESSION不过期,可以一劳永逸)

 

 

 

二、QQ邮箱

获取授权码

用QQ邮箱发件也需要登录,不是用账号密码,而是授权码,接下来获取授权码

进入QQ邮箱网页版,进入设置,选择账户

 

 

 

 

 往下翻找到 POP3/SMTP服务,确保第一项是“已开启”状态,如果不是,点击后面的开启,然后选择下面的“生成授权码”

 

 

 

 根据提示验证后,得到授权码,把授权码复制保存到word文档

 

 

三、Python 代码

代码中直接会填入打卡的地址(需要填写经纬度),所以代码正常运行后,即使人不在学校,打卡也会在学校

可以用高德地图开放平台获取坐标  地址:https://lbs.amap.com/tools/picker

 

 

 python代码

import json
import logging
import requests, time, random
import datetime
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def get_status(self):
    if self['code'] == 0:
        return "健康打卡成功"
    elif self['code'] == 1:
        return "健康打卡时间结束"
    elif self['code'] == -10:
        return "···JWSESSION已失效"
    else:
        return "发生未知错误"

class answer:
    def __init__(self):

        self.jwsessionName = ["xxx"]  # 姓名

        self.my_sender = 'XXX'  # 发信人的邮箱账号(写自己账号)
        self.my_pass = 'xxx'  # 邮箱授权码(与发件人账号的授权码一致)
        self.my_user = 'xxx'  # 收件人邮箱账号(写自己的或者小号)            #注意:  邮箱账号不是QQ号

        self.api = "https://student.wozaixiaoyuan.com/health/save.json"
        self.headers = {
            "Host": "student.wozaixiaoyuan.com",
            "Content-Type": "application/x-www-form-urlencoded",
            "Accept-Encoding": "gzip, deflate, br",
            "Connection": "keep-alive",
            "User-Agent": "xxx",  # User-Agent
            "Referer": "xxx",  # Referer
            "Content-Length": "360",
            "JWSESSION": "xxx",  # JWSESSION
        }

        self.data = {
            #answers为我在校园的问题,从上往下,0代表第一个选项,三个xxx代表体温
            "answers": '["0","xxx","xxx","xxx"]',
            #所以三个xxx要改成适当的体温(36-37)

            # 打卡地址
           "longitude": "xxx",  # 经度
            "latitude": "xxx",  # 纬度
            "country": "中国",
            "province": "xxx省",
            "city": "xxx市",
            "district": "xxx区",
            "township": "xxx街道",
            "street": "xxx路",
        }

    def get_seq(self):
        current_hour = datetime.datetime.now()
        current_hour = current_hour.hour + 8
        if 0 <= current_hour <=18:
            return 0
        else:
            return 1

    def run(self):
        print("JWSESSION:" + self.headers["JWSESSION"])
        print(datetime.datetime.now())
        res = requests.post(self.api, headers=self.headers, data=self.data, ).json()  # 打卡提交
        time.sleep(1)
        print(res)
        print(random.randint(1, 100))

        try:
            msg = MIMEText(self.jwsessionName[0]+"  "+get_status(res), 'plain', 'utf-8')  # 填写邮件内容
            msg['From'] = formataddr(["我在校园", self.my_sender])  # 发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["Me", self.my_user])  # 收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = get_status(res)  # 邮件的主题,也可以说是标题

            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器
            server.login(self.my_sender, self.my_pass)  # 发件人邮箱账号、邮箱授权码
            server.sendmail(self.my_sender, [self.my_user, ], msg.as_string())  # 发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
            res = False
        return True


if __name__ == "__main__":
    answer().run()


def main_handler(event, context):
    logger.info('got event{}'.format(event))
    return answer().run    

 

 代码写好并运行!就可以实现打卡

但是这个无法实现自动打卡,所以把代码部署到腾讯云(也可以是其他云,这里选择腾讯云    马总记得给我打钱)

四、腾讯云函数

注册完记得完成实名认证,腾讯云:腾讯云(tencent.com)

 

进入腾讯云先登录,搜索云函数

 

 点击控制台

 

 

 再点击函数服务--->新建

 

 选择自定义创建

 

往下翻,函数代码选择在线编辑,把刚刚编辑好的代码粘贴在这里

 

 

 

然后点击完成

 

再函数管理中选择你创建的函数,点击函数代码,点击测试

 

 

 

这时你会收到一封自己发来的邮件,健康打卡成功!!!

最后就是创建定时触发器了,让腾讯云定时帮你运行代码

 

触发管理 → 创建触发器

 

 

 

 

 

这里有两种方案,默认的,即定时触发器,触发周期每天(0点0分执行一次)

 

 

 第二种方案选择自定义周期

 

 

 

 

这里需要了解Cron表达式

 

 举例:每天10点运行的表达式为:  00 00 10 * * * *

每一位用空格隔开

 

最后点击提交

每天10点云函数会自动帮你健康打卡,打卡地点是代码上写的经纬度地点

 

道高一尺魔高一丈,期待我在校园的再次改

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM