Python實現(xiàn)App自動簽到領(lǐng)取積分功能
要自動簽到,最簡單的是打開頁面分析請求,然后我們用腳本實現(xiàn)請求的自動化。但是發(fā)現(xiàn)食行沒有頁面,只有 APP,這不是一個好消息,這意味著需要抓包處理了。
下面的操作就好辦了,在電腦端的瀏覽器打開網(wǎng)址,按下 F12,開始起飛~
登錄分析
點擊簽到后,會跳轉(zhuǎn)到用戶登錄頁面: https://wechatx.34580.com/mart/#/sign/in,輸入登錄信息后,點擊登錄,同時關(guān)注開發(fā)調(diào)試欄的網(wǎng)絡(luò)交互信息 。
可以發(fā)現(xiàn),登錄的請求地址是: https://wechatx.34580.com/sz/Sign/SignInV2,并且會在請求時帶著登錄信息 :
{ "SourceType": "9", "Phone": "18800000000", "PassWord": "98a53578bd74e150", "ZhuGeDeviceMd5": "164edd53b71674-02922cef4808a-47e1039-e1000-164edd53b7222e", "DeviceId": "" }
現(xiàn)在,還無法確定哪些字段是必填的,哪些是可以不傳的。
有一個問題是,密碼是經(jīng)過加密的,我在頁面輸入的 000000 ,這里變成了 98a53578bd74e150。這里我找了半天是如何加密的,也沒有找到,若是有大神有辦法,還請留言告知!
不過還好,加密方式是固定的,也就是 000000 一直對應(yīng)的是 98a53578bd74e150,我們只要記下這個加密后的密碼,在登錄時,傳入后臺即可。
登錄成功后,請求會響應(yīng)一些 token 數(shù)據(jù):
{ "Error": 0, "Message": "返回正確", "Data": { "CustomerGuid": "d8cd7c84-xxxx-4369-xxxx-b1e86c027407", "Phone": "18800000000", "AccessToken": "73c7b5fxxxxxxx" } }
只要 Error 字段為 0,就代表登錄成功!
簽到分析
登錄成功后,頁面會自動跳轉(zhuǎn)到首頁,我們可以看到簽到圖標(biāo),點擊它,進(jìn)入簽到頁面:
發(fā)現(xiàn)進(jìn)來還是一個簽到按鈕,套娃??!再點它!
終于簽到成功!
發(fā)現(xiàn)簽到的請求: https://wechatx.34580.com/sz/SignUp/CustomerSignUp
簽到請求中有兩個重要的參數(shù),accesstoken 和 customerguid,這兩個參數(shù)就是登陸后返回的。
簽到請求響應(yīng):
{ "Error": 0, "Message": "返回正確", "Data": { "GetPoints": 5, "SumGetPoints": 840 } }
返回說這次簽到獲得了 5 個積分,其實連續(xù)簽到 4 天后,每天就可以獲得 20 積分了!
實現(xiàn)
通過上面的分析,我們的簽到流程也很清晰了,首先就是登陸獲取 accesstoken 和 customerguid,然后再去簽到就可以了!
import requests, json, sys def login(Phone, PassWord): url = "https://wechatx.34580.com/sz/Sign/SignInV2" payload = { 'SourceType': 9, 'Phone': Phone, 'PassWord': PassWord } # 測試下來發(fā)現(xiàn),連 header 都不需要 response = requests.post(url, data=json.dumps(payload)) data = json.loads(response.text) is_error = data['Error'] # 登錄失敗直接退出 if is_error: print('登錄失?。簕}'.format(data['Message'])) sys.exit(1) else: print('登錄成功!') return data['Data']['CustomerGuid'], data['Data']['AccessToken'] def signin(customerguid, accesstoken): url = "https://wechatx.34580.com/sz/SignUp/CustomerSignUp" querystring = {"accesstoken": accesstoken, "customerguid": customerguid, "sourcetype": "9"} # 這次不需要 body 中的傳入數(shù)據(jù) response = requests.post(url, params=querystring) data = json.loads(response.text) is_error = data['Error'] if is_error: print(data['Message']) else: print("簽到成功,獲取到 {} 個積分".format(data['Data']['GetPoints'])) if __name__ == "__main__": Phone = input('請輸入賬號:') PassWord = input('請輸入密碼:') customerguid, accesstoken = login(Phone.strip(), PassWord.strip()) signin(customerguid, accesstoken)
運(yùn)行:
$ python shsx.py
請輸入賬號:188xxxxxxxx
請輸入密碼:98a53578bd74e150
登錄成功!
簽到成功,獲取到 20 個積分
最后,怎么自動執(zhí)行?把登錄信息寫死到代碼里,然后放到 Linux 下的 crontab 里,每天早上執(zhí)行一次就行啦~
總結(jié)
這里還有一個遺留問題,就是登錄密碼的獲取,現(xiàn)在還只能通過 F12 查看請求獲取到,然后記下來。
相關(guān)文章
python中數(shù)組nums[:]和nums的區(qū)別
本文主要介紹了python中數(shù)組nums[:]和nums的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Django Auth用戶認(rèn)證組件實現(xiàn)代碼
這篇文章主要介紹了Django Auth用戶認(rèn)證組件實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10Win10 GPU運(yùn)算環(huán)境搭建(CUDA10.0+Cudnn 7.6.5+pytroch1.2+tensorflow1.
熟悉深度學(xué)習(xí)的人都知道,深度學(xué)習(xí)是需要訓(xùn)練的,本文主要介紹了Win10 GPU運(yùn)算環(huán)境搭建,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09Python中WatchDog的使用經(jīng)驗總結(jié)
在?python?中文件監(jiān)視主要有兩個庫,一個是?pyinotify,一個是?watchdog,本文主要為大家詳細(xì)介紹一下Python中WatchDog的使用相關(guān)經(jīng)驗,感興趣的小伙伴可以了解下2023-12-12python使用XPath解析數(shù)據(jù)爬取起點小說網(wǎng)數(shù)據(jù)
這篇文章主要介紹了python使用XPath解析數(shù)據(jù)爬取起點小說網(wǎng)數(shù)據(jù),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04用python實現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了用python實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07