使用Python一鍵完成健康打卡

'xxx,你怎么沒打卡,你是不是睡過頭了?哈哈哈'

'你還沒打卡分蓖,快去打卡啊,在線等尔许,急么鹤!'

'.............'

來源:本人博客

萌生想法

? 疫情以來每天都要完成健康打卡,說來慚愧味廊,有時(shí)候我真的就忘了蒸甜,還要去監(jiān)督別人。在上次用Python給釣魚網(wǎng)站提交垃圾信息后余佛,我就想著用Python來實(shí)現(xiàn)一鍵提交柠新,然后再配合windos的計(jì)劃任務(wù),每天自動(dòng)提交豈不是美滋滋辉巡。

? 今天` 2020年4月11日 `(過了0點(diǎn))恨憎,我完成了適合自己的腳本。不出意外的話下一個(gè)零點(diǎn)我就可以一鍵上報(bào)了。

看看實(shí)驗(yàn)圖:


這里顯示`今天已經(jīng)填報(bào)過了`是因?yàn)槲抑鲃?dòng)提交了信息憔恳,目的是方便我抓數(shù)據(jù)瓤荔。

一天只能提交一次實(shí)在不方便我抓數(shù)據(jù),其實(shí)昨天有機(jī)會(huì)來著钥组,被我浪費(fèi)了输硝。



發(fā)現(xiàn)問題

? 但是有問題存在

?-?別人怎么用?

?-?怎么登陸程梦?

這個(gè)時(shí)候就要提到`Cookie`了

???什么餅干

Cookie

簡單地說点把,某網(wǎng)站能`'一周免登陸'`就是用到了Cookie

百度百科:

Cookie,有時(shí)也用其復(fù)數(shù)形式 Cookies作烟。類型為“小型文本文件”愉粤,是某些網(wǎng)站為了辨別用戶身份砾医,進(jìn)行Session跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)拿撩,`由用戶客戶端計(jì)算機(jī)暫時(shí)或永久保存的信息`。

我的想法是:要想大家都能用還需要登錄抓取Cookie

`現(xiàn)在2020/4/11 1:35:06 睡覺啦如蚜,明天繼續(xù)`


終于成功

現(xiàn)在`2020/4/12 3:26:23 `我們繼續(xù)

經(jīng)過辣么辣么久的嘗試(剛?cè)腴TPython),我終于成功啦

代碼我會(huì)放在最后压恒,因?yàn)楝F(xiàn)在水平不高,大佬勿噴啊

`記得安裝result庫:pip install result`


?-?`https://app.nwafu.edu.cn/uc/wap/login/check`模擬登錄错邦,保存cookie

?-?`https://app.nwafu.edu.cn/ncov/wap/default/save`再繼續(xù)請(qǐng)求健康上報(bào)頁面

健康上報(bào)頁面的要提交的header包含很多信息探赫,在瀏覽器抓到的數(shù)據(jù)中

?-?`https://webapi.amap.com/maps/ipLocation`是獲取經(jīng)緯度的的請(qǐng)求地址

?-?`https://restapi.amap.com/v3/geocode/regeo`是獲取詳細(xì)地址的請(qǐng)求地址

提交詳細(xì)地址請(qǐng)求后會(huì)返回

```json

jsonp_703113_({"status":"1","regeocode":{"addressComponent":{"city":"某某地區(qū)","province":"新省","adcode":"行政區(qū)號(hào)","district":"縣","towncode":"行政區(qū)號(hào)","streetNumber":{"number":"街道號(hào)","location":"經(jīng)度,緯度","direction":"方向","distance":"34.3624","street":"街道"},"country":"國家","township":"鎮(zhèn)","businessAreas":[[]],"building":{"name":[],"type":[]},"neighborhood":{"name":[],"type":[]},"citycode":"區(qū)號(hào)"},"formatted_address":"詳細(xì)地址"},"info":"OK","infocode":"10000"})

```

在這里我將這串?dāng)?shù)據(jù)賦值給`city0`,然后用字符串切片截取數(shù)據(jù)

```python

city=city0[city0.index('"city":"')+8:city0.index('","province"')]

province=city0[city0.index('"province":"')+12:city0.index('","adcode"')]

district=city0[city0.index('district":"')+11:city0.index('","towncode"')]

adcode=city0[city0.index('"adcode":"')+10:city0.index('","district"')]

citycode=city0[city0.index('"citycode":"')+12:city0.index('"},"formatted_address":')]

```

然后放到`data`中

```python

data = {

??'tw': '7',

??'sfcxtz': '0',

??'sfjcbh': '0',

??'sfcxzysx': '0',

??'qksm': '',

??'sfyyjc': '0',

??'jcjgqr': '0',

??'remark': '',

??'address': address,

??'geo_api_info': geo_api_info,

??'area': area,

??'province': province,

??'city': city,

??'sfzx': '0',

??'sfjcwhry': '0',

??'sfjchbry': '0',

??'sfcyglq': '0',

??'gllx': '',

??'glksrq': '',

??'jcbhlx': '',

??'jcbhrq': '',

??'bztcyy': '1',

??'sftjhb': '0',

??'sftjwh': '0',

??'jcjg': '',

??'uid': '77567',

??'created': '1586448147',

??'date': '20200410',

??'jcqzrq': '',

??'sfjcqz': '',

??'szsqsfybl': '0',

??'sfsqhzjkk': '',

??'sqhzjkkys': '',

??'sfygtjzzfj': '0',

??'gtjzzfjsj': '',

??'id': '2551432',

??'gwszdd': '',

??'sfyqjzgc': '',

??'jrsfqzys': '',

??'jrsfqzfy': '',

??'ismoved': '0'

}

```

最后提交,大工告成

在全部代碼的12行改好自己的學(xué)號(hào)密碼撬呢,然后將這個(gè)腳本添加至計(jì)劃任務(wù)就可以每天`自動(dòng)打卡`了

不知道如何設(shè)置的可以參考:windows創(chuàng)建定時(shí)任務(wù)執(zhí)行python腳本")

全部代碼

```python

# !/usr/bin/env python

# -*- coding: utf-8 -*-

#請(qǐng)?jiān)?2行補(bǔ)全賬號(hào)密碼

import urllib.request

import urllib.parse

#import urllib.errorss

import http.cookiejar

import requests

import time

LOGIN_URL = r'https://app.nwafu.edu.cn/uc/wap/login/check'??# 登錄教務(wù)系統(tǒng)的URL,目的是獲取cookie

get_url = 'https://app.nwafu.edu.cn/ncov/wap/default/save'??# 利用cookie請(qǐng)求打卡地址

values = {'username': '在這里輸入學(xué)號(hào)', 'password': '在這里輸入密碼'}

postdata = urllib.parse.urlencode(values).encode()

############################################################################################################

headers3 = {

????'authority': 'webapi.amap.com',

????'pragma': 'no-cache',

????'cache-control': 'no-cache',

????'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',

????'sec-fetch-dest': 'script',

????'accept': '*/*',

????'sec-fetch-site': 'cross-site',

????'sec-fetch-mode': 'no-cors',

????'referer': 'https://app.nwafu.edu.cn/ncov/wap/default/index',

????'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',

}

params3 = (

????('key', '729923f88542d91590470f613adb27b5'),

????('callback', 'jsonp_734125_'),

????('platform', 'JS'),

????('logversion', '2.0'),

????('appname', 'https://app.nwafu.edu.cn/ncov/wap/default/index'),

????('csid', '88DB2BE4-AEC3-47E1-909F-E08A63B3CF61'),

????('sdkversion', '1.4.4'),

)

response = requests.get('https://webapi.amap.com/maps/ipLocation', headers=headers3, params=params3)

ipdz=response.text

jdd=ipdz[ipdz.index('"lat":"')+7:ipdz.index('"})')]

print('經(jīng)度:',jdd,end='??')

wdd=ipdz[ipdz.index('"lng":"')+7:ipdz.index('","lat"')]

print('緯度:',wdd)

#以上獲取經(jīng)緯度

############################################################################################################

headers1 = {

????'Connection': 'keep-alive',

????'Pragma': 'no-cache',

????'Cache-Control': 'no-cache',

????'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',

????'Sec-Fetch-Dest': 'script',

????'Accept': '*/*',

????'Sec-Fetch-Site': 'cross-site',

????'Sec-Fetch-Mode': 'no-cors',

????'Referer': 'https://app.nwafu.edu.cn/ncov/wap/default/index',

????'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',

}

params1 = (

????('key', '729923f88542d91590470f613adb27b5'),

????('s', 'rsv3'),

????('language', 'undefined'),

????('location', '75.86036,39.37025'),

????('extensions', 'base'),

????('callback', 'jsonp_703113_'),

????('platform', 'JS'),

????('logversion', '2.0'),

????('appname', 'https://app.nwafu.edu.cn/ncov/wap/default/index'),

????('csid', '090D6179-CE87-4E0C-8AA9-69B0B3E8FF8A'),

????('sdkversion', '1.4.4'),

)

response1 = requests.get('https://restapi.amap.com/v3/geocode/regeo', headers=headers1, params=params1)

city0=response1.text

fa=city0[city0.index('ess":"')+6:city0.index('"},"info')]

print('位置:',fa)

#以上獲取地址

city=city0[city0.index('"city":"')+8:city0.index('","province"')]

province=city0[city0.index('"province":"')+12:city0.index('","adcode"')]

district=city0[city0.index('district":"')+11:city0.index('","towncode"')]

adcode=city0[city0.index('"adcode":"')+10:city0.index('","district"')]

citycode=city0[city0.index('"citycode":"')+12:city0.index('"},"formatted_address":')]

print(city,end='??')

print(province,end='??')

print(district)

print("行政區(qū)劃代碼:",adcode)

print('區(qū)號(hào):',citycode)

area=province+' '+city+' '+district

address=province+city+district

############################################################################################################

headers = {'authority': 'app.nwafu.edu.cn','pragma': 'no-cache','cache-control': 'no-cache','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36','sec-fetch-dest': 'document','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','sec-fetch-site': 'same-origin','sec-fetch-mode': 'navigate','referer': 'https://app.nwafu.edu.cn/site/applicationSquare/index?sid=8','accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',}

info0='{"type":"complete","info":"SUCCESS","status":1,"Eia":"jsonp_676131_","position":{"P":'

jd=jdd

wd=wdd

info3='},"message":"Get ipLocation success.Get address success.","location_type":"ip","accuracy":null,"isConverted":true,"addressComponent":{"citycode":'

ac='adcode":"'

info4='"businessAreas":[],"neighborhoodType":"","neighborhood":"","building":"","buildingType":"","street":"","streetNumber":"","province":"","city":"","district":"","township":""},"formattedAddress":'

info1=',"roads":[],"crosses":[],"pois":[]}'

d=','

info2=','

geo_api_info=info0+jd+d+'"O":'+wd+d+'"lng":'+wd+d+'"lat":'+jd+info3+'"'+citycode+'"'+d+'"'+ac+address+'"'+d+info4+fa+'"'+info1+info2

data = {

??'tw': '7',

??'sfcxtz': '0',

??'sfjcbh': '0',

??'sfcxzysx': '0',

??'qksm': '',

??'sfyyjc': '0',

??'jcjgqr': '0',

??'remark': '',

??'address': address,

??'geo_api_info': geo_api_info,

??'area': area,

??'province': province,

??'city': city,

??'sfzx': '0',

??'sfjcwhry': '0',

??'sfjchbry': '0',

??'sfcyglq': '0',

??'gllx': '',

??'glksrq': '',

??'jcbhlx': '',

??'jcbhrq': '',

??'bztcyy': '1',

??'sftjhb': '0',

??'sftjwh': '0',

??'jcjg': '',

??'uid': '77567',

??'created': '1586448147',

??'date': '20200410',

??'jcqzrq': '',

??'sfjcqz': '',

??'szsqsfybl': '0',

??'sfsqhzjkk': '',

??'sqhzjkkys': '',

??'sfygtjzzfj': '0',

??'gtjzzfjsj': '',

??'id': '2551432',

??'gwszdd': '',

??'sfyqjzgc': '',

??'jrsfqzys': '',

??'jrsfqzfy': '',

??'ismoved': '0'

}

cookie_filename = 'cookie_jar.txt'

cookie_jar = http.cookiejar.MozillaCookieJar(cookie_filename)

handler = urllib.request.HTTPCookieProcessor(cookie_jar)

opener = urllib.request.build_opener(handler)

request = urllib.request.Request(LOGIN_URL, postdata, headers)

try:

????response = opener.open(request)

????# print(response.read().decode())

except urllib.error.URLError as e:

????print(e.code, ':', e.reason)

cookie_jar.save(ignore_discard=True, ignore_expires=True)??# 保存cookie到cookie.txt中

print('*'*80)

print('cookie已經(jīng)寫.py文件同路徑的“cookie_jar.txt”')

print('cookie信息:')

for item in cookie_jar:

????print('name=',item.name,end=' ')

????print('value=',item.value,end=' ')

print('')

print('*'*80)

data=urllib.parse.urlencode(data).encode()

get_request = urllib.request.Request(get_url, headers=headers,data=data)

get_response = opener.open(get_request)

final=get_response.read().decode()

if '成功' in final:

????pirnt("歐耶伦吠!上報(bào)完成")

????print('完成,程序3秒后退出')

????print('3')

????time.sleep(1)

????print('2')

????time.sleep(1)

????print('1')

????time.sleep(1)

????print('Bye bye??:)')

elif '已經(jīng)填報(bào)' in final:

????print("今天已經(jīng)填報(bào)過啦???)QWQ )")

????print('完成魂拦,程序3秒后退出')

????print('3')

????time.sleep(1)

????print('2')

????time.sleep(1)

????print('1')

????time.sleep(1)

????print('Be seeing you??:)')

elif '請(qǐng)輸入' in final:

????print('發(fā)生錯(cuò)誤毛仪,請(qǐng)檢查賬號(hào)密碼,程序3秒后退出')

????print('3')

????time.sleep(1)

????print('2')

????time.sleep(1)

????print('1')

????time.sleep(1)

????print('Have a nice day???:(')

```


最終翻車

`2020/4/12 4:16:56 `

還未測(cè)試芯勘,今天會(huì)測(cè)試箱靴,個(gè)人感覺會(huì)翻車,建議不要使用荷愕,請(qǐng)持續(xù)關(guān)注衡怀,測(cè)試成功后可使用

`2020/4/12 11:00:19 `經(jīng)測(cè)試,無法獲取地理位置安疗,原因可能是我沒用儲(chǔ)存的cookie請(qǐng)求定位

`2020/4/12 12:34:26 `我搞不定請(qǐng)求定位的了抛杨,沒有達(dá)到預(yù)期效果,只有我自己能用荐类,其他人如果想用就要去抓一下獲取地址的請(qǐng)求怖现。我已經(jīng)加入了計(jì)劃任務(wù):


還得學(xué)好了再說啊,我把這破操作總結(jié)為:`萌新沒學(xué)走路就開跑`掉冶,但也是一個(gè)學(xué)習(xí)的過程了真竖。劃入歸檔啦脐雪,byebye!

原文地址:使用Python一鍵完成健康打卡

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恢共,一起剝皮案震驚了整個(gè)濱河市战秋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讨韭,老刑警劉巖脂信,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異透硝,居然都是意外死亡狰闪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門濒生,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埋泵,“玉大人,你說我怎么就攤上這事罪治±錾” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵觉义,是天一觀的道長雁社。 經(jīng)常有香客問我,道長晒骇,這世上最難降的妖魔是什么霉撵? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮洪囤,結(jié)果婚禮上徒坡,老公的妹妹穿的比我還像新娘。我一直安慰自己箍鼓,他們只是感情好崭参,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著款咖,像睡著了一般何暮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铐殃,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天海洼,我揣著相機(jī)與錄音,去河邊找鬼富腊。 笑死坏逢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播是整,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼肖揣,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了浮入?” 一聲冷哼從身側(cè)響起龙优,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎事秀,沒想到半個(gè)月后彤断,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡易迹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年宰衙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睹欲。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡供炼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出句伶,到底是詐尸還是另有隱情劲蜻,我是刑警寧澤陆淀,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布考余,位于F島的核電站,受9級(jí)特大地震影響轧苫,放射性物質(zhì)發(fā)生泄漏楚堤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一含懊、第九天 我趴在偏房一處隱蔽的房頂上張望身冬。 院中可真熱鬧,春花似錦岔乔、人聲如沸酥筝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘿歌。三九已至顶岸,卻和暖如春益眉,著一層夾襖步出監(jiān)牢的瞬間盛嘿,已是汗流浹背恤筛。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工端逼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笔喉,地道東北人堡僻。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓观谦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親靴患。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仍侥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容