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