胖的很有节奏
苟全性命于乱世,不求闻达诸侯。
posts - 4,comments - 20,views - 3790

我在校园自动签到与健康打卡逻辑类似,只是设置了动态ID,所以抓包的时候要先抓取动态ID

进入正题

一.抓包

fiddler的配置和以前一样,不会的可以去看我以前写的博客(https://www.cnblogs.com/Python-Java-C-E/p/15580618.html),

点击签到,找到   (http://student.wozaixiaoyuan.com/sign/getSignMessage.json)

老样子还是User-Agent、JWSESSION、Referer三件套

    

点击签到,找到   (http://student.wozaixiaoyuan.com/sign/doSign.json/)

 

 

 还是这3个值跟上面的一样,皮一下很开心!!!User-Agent、JWSESSION、Referer

 

二.代码

重点来了,代码

复制代码
import json
import re
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'] == -10:
        return "···JWSESSION已失效"
    else:
        return "!!!发生未知错误"
class answer:
    def __init__(self):

        self.jwsessionName = [""]  # 姓名

        self.my_sender = 'xxx'  # 发信人的邮箱账号
        self.my_pass = 'xxxxx'  # 发件人邮箱授权码
        self.my_user = 'xxxxxx'  # 收件人邮箱账号

        getheaders = {
            "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": "xxxl",  # Referer
            "Content-Length": "500",
            "JWSESSION": "xxx0",  # JWSESSION
        }
        first = 'page=1&size=5'
        getapi = "http://student.wozaixiaoyuan.com/sign/getSignMessage.json"
        getdata = requests.post(getapi, headers=getheaders, data=first, ).json()
        time.sleep(1)
        getdata = getdata['data']
        a = str(getdata).replace("[", "");
        b = str(a).replace("]", "");
        c = b
        d = re.findall(r"{(.+?)}", c)
        e = "{" + d[0] + "}"
        e = eval(e)
        Fid = e['id']
        Lid = e['logId']
        self.data = '{"id":' + Lid + "," + '"signId":' + Fid + "," + '''
                "latitude":xxxxx,  #维度
                "longitude":xxxx,   # 经度
                "country":"中国",
                "province":"xx省",
                "city":"xx市",
                "district":"xx区",
                "township":"xxxx街道"''' + "}"  # 打卡位置

        print(self.data)
        self.api="http://student.wozaixiaoyuan.com/sign/doSign.json/"
        self.headers ={
            "Host": "student.wozaixiaoyuan.com",
            "Content-Type": "application/json",
            "Accept-Encoding": "gzip, deflate, br",
            "Connection": "keep-alive",
            "User-Agent": "xxxx",  # User-Agent
            "Referer": "xxxx",  # Referer
            "Content-Length": "500",
            "Cookie":"",
            "JWSESSION": "xxxx",  # JWSESSION
        }
    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.encode(),).json()  # 打卡提交
        time.sleep(1)
        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
            return False
        return True


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


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

 

这里继续使用QQ邮箱给我们返回签到结果(马总记得给我打钱) 

关于QQ授权码和经纬度看我上面提到的博客,这里就不赘述了

三.云函数

 

由于腾讯云改版,python3.7不支持库内置依赖库,所以选择版本的时候选python3.6

 

 后面的操作与之前的一样!部署云函数,设置触发器............

 

其他

关于云函数的一些bug

 

 

 如果代码在pycharm中可以运行不报错,部署到云函数后报{"errorCode":-1,"errorMessage":"Invoking task timed out after 3 seconds","requestId":"5df4adf3-414e-4109-8df8-10650359a265","statusCode":433}

解决办法,将函数配置中的执行时间改长,这里改成30s

 

 

 

posted on   胖的很有节奏  阅读(303)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示