利用Python實作每日健康打卡
疫情期間學校要求在健康系統中每日打卡,奈何我又老是忘記打卡,就有了做一個自動打卡的腳本來幫助我每日自動打卡想法,于是在沒事的時候研究了一下學校的疫情打卡系統,用Python撰寫了一個自動打卡的小程式,
1.登錄系統
系統的登錄界面做的還是很簡單的,也沒有驗證碼等驗證機制,使用 學號(Account)、密碼(Password) 就可以登錄系統,做一次錯誤的登錄,使用抓包工具抓包分析,很容易的就找到了登錄介面,觀察到登錄是向登錄介面發起一個Post請求,

繼續分析發現Post請求所攜帶的資訊有:user_account—學號 、user_password—密碼,資料為json格式,

代碼實作
# 登錄系統
def login(account, password):
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; V1914A Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045438 Mobile Safari/537.36 wxwork/3.1.1 MicroMessenger/7.0.1 NetType/WIFI Language/zh Lang/zh'
}
data = {
'user_account': account,
'user_password': password
}
login_url = parse.urljoin(url, 'login')
res = session.post(login_url, headers=headers, data=json.dumps(data))
res = res.json()
status = res['code']
if status == 200:
print('{}登錄成功'.format(account))
else:
print(res['msg'])
print('{}登錄失敗'.format(account))
2.獲取未打卡日期
回顧以前打卡程序:成功進入到健康打卡系統之后,找到當天的打卡日期,進行打卡,接下來就是要做的就是獲取這個打卡日期,分析發現也是一個Post請求,請求未攜帶任何資訊,

發送Post請求后回傳的是一個json格式的資料,分析json資料發現,打卡日期位于 datas—hunch_list 中,其中編號為0的就是我們需要打卡的日期資訊,其中 date1 為當前打卡日期、 state 為當前日期打卡狀態,0為未打卡,1為未打卡,程式中還對打卡狀態進行了判斷,如未打卡,回傳打卡日期,如已打卡,不回傳資料,

代碼實作
# 獲取打卡日期
def getHomeDate():
data = {
}
getHomeDate_url = parse.urljoin(url, 'getHomeDate')
res = session.post(getHomeDate_url,data=json.dumps(data))
res = res.json()
if res['datas']['hunch_list'][0]['state'] == 1:
print('{},您{}已打卡'.format(res['datas']['user_info']['user_name'], res['datas']['hunch_list'][0]['date1']))
else:
print('{},您{}未打卡'.format(res['datas']['user_info']['user_name'], res['datas']['hunch_list'][0]['date1']))
return res['datas']['hunch_list'][0]['date1']
3.提交資訊
接下來的就是要提交資訊了,對打卡提交的請求頭所包含的Data進行撰寫就行了,請求頭包含的資訊如下:
-
mqszd: 目前所在地? 沈陽市/遼寧省非沈陽市/其他地區(非遼寧省) -
sfybh: 前一日填報到目前為止,目前所在地(第1題)是否存在變化? 否/是 -
mqstzk: 目前身體狀況? 良好/干咳乏力、發熱、呼吸困難等病癥/醫學觀察隔離/疑似病例/確診病例 -
jcryqk: 近14日接觸人員情況 未接觸下述五類人員/確診病例/疑似人員/醫學觀察人員/中高風險地區出入人員 -
glqk: 隔離情況 自行做好防護/醫學隔離觀察/按要求定點隔離 -
jrcltw: 今日測量體溫(℃) -
sjhm: 請填寫目前個人手機號碼 -
jrlxfs: 請填寫家人聯系方式 -
xcsj: 如目前所在地(第1題)較前一日填寫資料有變化,請填寫行程出發時間(例:18時10分)、使用的交通工具及車次/航班號(例:火車G8001)、外出原因(例:實習)(針對第2題選擇“是”的情況) -
gldd: 如醫學隔離觀察或按要求定點隔離,請填寫隔離起始時間、隔離地點(針對第6題未選擇“自行做好防護”的情況) -
zddw: 我的位置(需要開啟手機定位功能)中國,**省,**市,**縣<@>**
放入我們的資訊,再Post請求中提交就可以了,

填寫示例
{"mqszd":"其他地區(非遼寧省)","sfybh":"否","mqstzk":"良好","jcryqk":"未接觸下述五類人員","glqk":"自行做好防護","jrcltw":"36.5","sjhm":"","jrlxfs":"","xcsj":"","gldd":"","zddw":"中國,**省,**市,**縣(區)<@>**"}
代碼實作
#提交表單
def punchForm(date):
data = {
'punch_form': '{"mqszd":"","sfybh":"","mqstzk":"","jcryqk":"","glqk":"","jrcltw":"","sjhm":"","jrlxfs":"","xcsj":"","gldd":"","zddw":"中國,**省,**市,**縣(區)<@>**"}',
'date': date
}
punchForm_url = parse.urljoin(url, 'punchForm')
res = session.post(punchForm_url, data=json.dumps(data))
res = res.json()
if res['code'] == 200:
print('恭喜,打卡成功')
else:
print('糟糕,打卡失敗')
print('錯誤資訊:\n{}'.format(res['msg'])
4.整體分析
回顧整個程式,利用request.session保持登錄狀態,login登錄函式撰寫,getHomeDate獲取未打卡日期函式撰寫,punchForm打卡資訊提交函式撰寫,最重要的還是對網頁請求的分析,然后撰寫python代碼進行打卡行為模擬,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/263311.html
標籤:其他
上一篇:C語言之實作單鏈表的基本操作
