我的校园自动化打卡脚本

本文写于2021.3.7,目前为止可用,原理为抓包token值模拟登录,再通过脚本将打卡数据post上传至服务器。

思路及代码参考GitHub项目:https://github.com/178me/dailyInspectionReport/

主要步骤:

  • 抓包token值
  • 云函数部署脚本打卡

工具:

  • 电脑或笔记本
  • 电脑端微信
  • 任意浏览器
  • 腾讯云账号(实名认证)

一、抓包获取token值

抓包教程为利用Fiddler抓包配置教程

1、下载Fiddler

下载最新版fiddler ,可以在官网下载:https://www.telerik.com/download/fiddler

公众号内回复【我的校园】获取

2、安装及配置Fidder

① 正常安装,下一步,下一步,可以修改软件安装地址,安装完毕后,打开软件。

② 打开Fiddler,点击工具栏中的Tools—>Options

打开Options

③ 点击https设置选项,勾选选择项

https设置

④ 点击Actions,点击第二项:Export Root Certificate to Desktop,这时候桌面上会出现证书FiddlerRoot.cer文件,点击OK设置成功,关闭fiddler

生成证书

⑤ PC端,在浏览器中导入证书FiddlerRoot.cer,以谷歌浏览器为例说明,在浏览器上输入: chrome://settings/ 然后进入高级设置,搜索管理证书

浏览器

⑥ 在受信任的根证书颁发机构,对证书进行导入(一直下一步就行)

导入证书

⑦ 重新打开fiddler,就可以在电脑上进行https抓包了。如果不成功请看参考文章后面解决方案

抓包

3、获取token值

登录电脑端微信,打开我在校园日检日报
留意最下方出现的 student.wozaixiaoyuan.com双击打开

寻找被抓包网址

出现的这一串token字符串值就是我们需要的了,第一步任务已经实现。如果后续登录失效了,重新抓包获取这个值即可,如果不出现特殊情况这个登录能保持四天左右。

获取token字符串

二、云函数部署脚本打卡

1、登录腾讯云

如果没有用的过话先注册,实名认证,点击下面的链接快速创建账号

注册完成后在产品中搜索云函数,点击管理控制台

20201202095903

2、创建云函数

点击左侧的函数服务

点击新建

20201202170427

方式选择自定义创建,填写函数名称为autocheck,运行环境选择Python3.6

20201202170441

然后底下点击完成

3、获取喵码

手机微信中搜索公众号喵提醒,注册后添加提醒,保存后获取喵码

添加提醒
获取喵码

记住这个喵码待会代码中要用到

4、Python代码修改

这段代码主要需要修改的内容为注释修改1、修改2、修改3、修改4
分别为token值、打卡人昵称、喵提醒中的喵码和打卡人地址(可从Fiddler中看到之前打卡的位置信息)
将修改后的代码贴到index.py中

import json
import logging
import requests, time, random
import datetime

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


class Xiao:
    def __init__(self):
        # Token 列表
        # 修改1
        self.tokenArray = ["将这段话替换为抓包软件中获取的Token"]
        # 如:
        # self.tokenArray = ["98bf740e-9f38-45c0-a163-688f7831b8a8"]
        self.tokenName = ["我的校园日检日报自动打卡"]

        # 喵提醒通知
        # 这里填喵提醒中获取的喵码
        self.notifytoken = '填写在这里'
        self.api = "https://student.wozaixiaoyuan.com/heat/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": "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",
            "Referer": "https://servicewechat.com/wxce6d08f781975d91/147/page-frame.html",
            "token": "",
            "Content-Length": "360",
        }
        # 和我本校同地区的不用修改这里,如果其他地方请根据抓取的数据填写(详细方法请按照下面的教程获取)
        self.data = {
            "answers": '["0"]',
            "seq": self.get_seq(),
            "temperature": self.get_random_temprature(),
            "latitude": "34.3564216100 ", # 维度
            "longitude": "108.7080001800", # 经度
            "country": "中国",
            "city": "咸阳市",
            "district": "渭城区",
            "province": "陕西省",
            # "township": "某某街道",
            "street": "文林路",
        }

    # 获取随机体温
    def get_random_temprature(self):
        random.seed(time.ctime())
        return "{:.1f}".format(random.uniform(36.2, 36.7))

    # seq的1,2,3代表着早,中,晚
    def get_seq(self):
        current_hour = datetime.datetime.now()
        current_hour = current_hour.hour + 8
        if 0 <= current_hour <= 8:
            return "1"
        elif 11 <= current_hour < 15:
            return "2"
        elif 17 <= current_hour < 21:
            return "3"
        else:
            return 1

    def run(self):
        num = 0
        for i in self.tokenArray:
            self.headers["token"] = i
            print("Token:" + self.headers["token"])
            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))
            msg = {
                "id": self.notifytoken,
                "text": "Token"  + '\n' + self.tokenName[num] +self.headers["token"] + '\n' + json.dumps(res, ensure_ascii=False),
                "type": "json"
            }
            print(type(msg))
            requests.post("http://miaotixing.com/trigger", data=msg)
            num = num + 1
        return True


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


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

其他同学想要替换定位地址,请按照说明获取自己的经纬度信息

1.打开我的校园小程序,打开【每日健康打卡页面】,点击下面的位置定位

2.利用抓包软件fiddler 找到restapi.amap.com开头的url链接

3.点击右侧JSON,获取位置的JSON信息

4.根据代码名称填写即可

5、设置定时触发

点击左侧触发管理,创建触发器

20201202170729

起一个定时任务名称,将触发周期设置为最下面一个自定义触发周期

20201202170739
20201202170747

参数值为0 0 7,13,19

分别代表着秒 分 时 日 月 星期 年

这里参数表示每天的上午7点、下午1点和晚上7点定时触发我们的云函数

20201202170756
20201202170802

那么到了这一步基本上我们的自动打卡也就完成了,如果有什么其他问题,可以多百度一下,享受探索的快感。

结尾

关注我的公众号,号码内回复【我的校园】即可获取完整代码与所需工具,扫描下方二维码即可!

长安念姑苏

评论区
头像