python实现易校园自动打卡教程

准备

软件版本(请自行百度)

  • HttpCanary:v9.9.9.9安卓版

    可以用burpsuite,findler等其他的Windows抓包软件代替,自行搜索如何用电脑抓手机的包。

  • 易校园:v2.5.9

    易校园一定要使用低版本的!!!可以去豌豆荚下载历史版本,找到2开头的最后一个版本就行。

    最新版用了ssl pining,抓https的包很麻烦!

http Canary配置

打开http canary,界面如图
在这里插入图片描述
按照提示安装证书

部分手机可能无法自动弹出安装,比如我的手机。。。。参考以下步骤:

1、点击左上方菜单
在这里插入图片描述

2、点击【设置】


3、点击【SSL证书设置】
在这里插入图片描述
4、点击【导出HttpCanary根证书】
在这里插入图片描述
5、选择第二个
在这里插入图片描述
6、安装刚刚导出的证书
在这里插入图片描述

开始

  1. 完场上述准备工作

  2. 进入易校园打卡界面,等待定位完成,划到底部【先不要提交】

    这样做是为了快速找到提交的包
    在这里插入图片描述

  3. 此时打开HttpCanary,点击右下角的小飞机,开始抓包
    在这里插入图片描述

  4. 回到易校园,点击提交

  5. 回到HttpCanary,再次点击右下角小飞机,停止抓包

  6. 从下往上找出【POST https://h5.xiaofubao.com/marketing/health/doDetail】

注意别找错了,一定是doDetail

  1. 找到之后点进去,点击请求包
    在这里插入图片描述

  2. 点击预览,里面的数据就是你刚才打卡提交的数据,如下图(我的易校园又被强制更新了,抓不了包了,没有源数据包的截图,将就着看吧)
    在这里插入图片描述

  3. 代码如下,修改填入你自己的参数

    import requests
    from requests.api import head
    import yagmail
    
    
    def eMail(email_to, email_title, email_content):
        # 邮件用户
        mail_user = '你的邮箱'
        # 授权码
        mail_key = '授权码'
        # smtp服务器
        mail_host = 'smtp.qq.com'
        try:
            mail_server = yagmail.SMTP(
                user=mail_user, password=mail_key, host=mail_host)
            mail_server.send(email_to, email_title,
                             email_content, attachments=None)
            mail_server.close()
            return True
        except Exception as e:
            print(e)
            return False
    
    
    def DoDetail(json):
        # 输入打卡信息
        data = json
        # 添加打卡信息
        data['address'] = '根据左边的变量名,去数据包找相同的参数'
        # 填写Tokan信息
        data['uuToken'] = '同上'
        # 填写Userid
        data['loginUserId'] = '同上'
        # 填写学校id
        data['loginSchoolCode'] = '同上'
        # 填写学校名称
        data['loginSchoolName'] = '同上'
        # 填写体温信息
        data['temperature'] = '36.3'
        # 填写打卡地址
        data['longitudeAndLatitude'] = '同上'
        # 填写打卡地址
        data['locationInfo'] = '同上'
        requests.packages.urllib3.disable_warnings()
        # 请求易校园接口
        response = requests.post(
            "https://h5.xiaofubao.com/marketing/health/doDetail", headers=headers, data=data, verify=False)
        return response.json()
    
    
    # 获取userid
    def GetDetail(userid):
        data1 = {'userId': userid}
        requests.packages.urllib3.disable_warnings()
        response = requests.post(
            "https://h5.xiaofubao.com/marketing/health/getDetail", headers=headers, data=data1, verify=False)
        return response.json()
    
    
    # 伪造请求头
    if __name__ == '__main__':
        headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2006J10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/98.0.4758.101 Mobile Safari/537.36 Html5Plus/1.0 (Immersed/34.909092) ZJYXYwebviewbroswer ZJYXYAndroid tourCustomer /yunmaapp.NET/2.5.9/c9dcace70d408476',
                   'Cookie': 'shiroJID=be09980c-ace6-4350-ba63-38f441029802'}
        # 填写Userid
        json = GetDetail('填写你的Userid')
        if(json['success'] == True):
            json = DoDetail(json['data'])
            print(json)
        if(json['success'] == True):
            eMail(email_to='填写你的邮箱',
                  email_title='健康打卡成功!', email_content=str(json))
            print('成功')
        else:
            eMail(email_to='jenchoi413@qq.com',
                  email_title='健康打卡失败!', email_content=str(json))
            print('失败')
    
    1. 调试代码没问题之后,把代码挂到云服务器上,设置定时任务即可

    写在最后

    啊呀,写这种教学博客真的好麻烦!!!我也是第一次写

    参考:http://nicethemes.cn/news/txtlist_i174599v.html
    https://ylcao.top


版权声明:本文为jenchoi413原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。