Python實(shí)現(xiàn)疫情通定時自動填寫功能(附代碼)
自疫情始,學(xué)校就要求學(xué)生每天在學(xué)校內(nèi)系統(tǒng)填寫個人每日疫情相關(guān)情況,稱為疫情通。
但是,由于個人原因,出現(xiàn)了下圖情況。
記性太差,人又懶,于是決定用Python實(shí)現(xiàn)自動化定時任務(wù)。
1、核心模塊
打開IEChrome。
打開網(wǎng)頁按下F12拿到請求頭和請求體。
(假裝此處有圖片)
Pycharm啟動!
根據(jù)拿到的請求頭和請求體,完成核心代碼編寫。
url = "https://xxcapp.xidian.edu.cn/ncov/wap/default/save" headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'zh-cn', 'Accept-Encoding': 'gzip, deflate, br', 'Host': 'xxcapp.xidian.edu.cn', 'Origin': 'https://xxcapp.xidian.edu.cn', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) ' 'Version/13.1 Safari/605.1.15', 'Connection': 'keep-alive', 'Referer': 'https://xxcapp.xidian.edu.cn/ncov/wap/default/index', 'Content-Length': '2314', # Cookie是身份標(biāo)識 'Cookie': 'Hm_lpvt_48b682d5d22a90111e44886b972e3268=1590108209; ' # Hm_lpvt_xxxxxxx 為當(dāng)前時間戳(秒) # Hm_lvt_xxx 為一串時間戳。最近的一次訪問時間戳追加在后面,最多保留4個時間戳??梢酝ㄟ^關(guān)閉瀏覽器然后再訪問相同頁面查看其cookie值來驗(yàn)證。 'Hm_lvt_48b682a90111e46b9d4885d2272e3268=1590108209; UUkey=99cf86f295b522e264680402bf6b221e; ' 'Uqn3iPIDZBpD3wJU=vqtbQwSD1sjDM; eai-sess=prshbd3vo96po8i27a4mod1i67', 'X-Requested-With': 'XMLHttpRequest', } data = { 'uid': '123671', 'date': str(datetime.date.today() - datetime.timedelta(days=1)).replace("-", ""), 'tw': '3', # 體溫:第三項(xiàng),36.5-36.9 'sfcxtz': '0', # 是否出現(xiàn) 'sfyyjc': '0', # 是否醫(yī)院檢查 'jcjgqr': '0', # 檢查結(jié)果確認(rèn) 'sfjcbh': '0', # 是否接觸病患 'sfcxzysx': '0', # 是否出現(xiàn) 'address': '', 'area': '', 'province': '', # 地址 'city': '', # 城市 # 伽利略定位系統(tǒng)詳情 'geo_api_info': '{"type":"complete","position":{"P":11.203296169705,"O":11.667691514757,"lng":11.667692,' '"lat":11.203296},"location_type":"html5","message":"Get ipLocation failed.Get geolocation ' 'success.Convert Success.Get address success.","accuracy":15,"isConverted":true,"status":1,' '"addressComponent":{"citycode":"0001","adcode":"123456","businessAreas":[],' '"neighborhoodType":"","neighborhood":"","building":"","buildingType":"","street":"",' '"streetNumber":"","province":"","city":"","district":"","township":""},' '"formattedAddress":"","roads":[],"crosses":[],"pois":[],' '"info":"SUCCESS"}', 'created': str(int(time.time())), # 創(chuàng)建時間 'sfzx': '0', # 是否在校 否 'sfjcwhry': '0', # 是否接觸武漢人員 否 'sfcyglq': '0', # 是否處于隔離期 否 'sftjwh': '0', # 是否途徑武漢 否 'sftjhb': '0', # 是否途徑湖北 否 'fjsj': '0', 'sfjchbry': '0', # 是否接觸湖北人員 否 'sfsfbh': '0', # 是否 'jhfjsftjwh': '0', # *****是否途徑武漢 否 'jhfjsftjhb': '0', # *****是否途徑湖北 否 'szsqsfybl': '0', 'sfygtjzzfj': '0', # 是否 'sfjcjwry': '0', # 是否接觸境外人員 否 'id': '4393912', 'ismoved': '0', # 與上次地點(diǎn)是否有不同 } requests.post(url=url, data=data, headers=headers)
上述代碼已經(jīng)可以虛擬我們的提交能力了,但是還達(dá)不到自動化需求。最終目標(biāo)是能夠放在Linux服務(wù)器上每日早晨自動運(yùn)行一次,并接收到反饋。所以需要再加一個模塊,我選擇了郵件通知方式。
2、通知模塊
def sendEmail(message): msg_from = 'xxxxx@qq.com' # 發(fā)送方郵箱 passwd = '' # 發(fā)送方郵箱的授權(quán)碼 msg_to = 'xxxxx@qq.com' # 收件人郵箱 subject = "疫情通" # 主題 msg = MIMEText(message) msg['Subject'] = subject msg['From'] = msg_from msg['To'] = msg_to try: s = smtplib.SMTP_SSL("smtp.qq.com", 465) # 郵件服務(wù)器及端口號 s.login(msg_from, passwd) s.sendmail(msg_from, msg_to, msg.as_string()) print('[' + str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))) + "]郵件發(fā)送成功,郵件內(nèi)容:" + message) except s.SMTPException: print('[' + str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))) + "]郵件發(fā)送失敗,郵件內(nèi)容:" + message) finally: s.quit()
此函數(shù)接收字符串為參,并將此字符串送至目標(biāo)郵箱。
那么核心代碼最后一行便改為
sendEmail(eval(requests.post(url=url, data=data, headers=headers).text)['m'])
代碼編寫完畢,文末有完整版。接下來實(shí)現(xiàn)自動化運(yùn)行。
3、自動化模塊
Terminal啟動!
將本py文件scp至服務(wù)器,然后在同目錄下創(chuàng)建output.log文件,用以記錄每日信息(考慮到郵件發(fā)送失敗的情況)。
編輯/etc/crontab,在最后的#上面加上下圖內(nèi)容,最后兩個分別是py文件和log文件的路徑,整行內(nèi)容表示的是在每天8:30以root身份自動運(yùn)行右側(cè)命令。
4、最終效果
由下圖log文件內(nèi)容可知,2020-05-25早8時30分3秒完成此任務(wù),也就是說此任務(wù)運(yùn)行一次需要三秒。
在郵箱中也可以看到已經(jīng)收到郵件。
5、完整代碼
import time import requests import smtplib import datetime from email.mime.text import MIMEText def sendEmail(message): msg_from = 'xxxxx@qq.com' # 發(fā)送方郵箱 passwd = '' # 發(fā)送方郵箱的授權(quán)碼 msg_to = 'xxxxx@qq.com' # 收件人郵箱 subject = "疫情通" # 主題 msg = MIMEText(message) msg['Subject'] = subject msg['From'] = msg_from msg['To'] = msg_to try: s = smtplib.SMTP_SSL("smtp.qq.com", 465) # 郵件服務(wù)器及端口號 s.login(msg_from, passwd) s.sendmail(msg_from, msg_to, msg.as_string()) print('[' + str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))) + "]郵件發(fā)送成功,郵件內(nèi)容:" + message) except s.SMTPException: print('[' + str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))) + "]郵件發(fā)送失敗,郵件內(nèi)容:" + message) finally: s.quit() url = "https://xxcapp.xidian.edu.cn/ncov/wap/default/save" headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'zh-cn', 'Accept-Encoding': 'gzip, deflate, br', 'Host': 'xxcapp.xidian.edu.cn', 'Origin': 'https://xxcapp.xidian.edu.cn', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) ' 'Version/13.1 Safari/605.1.15', 'Connection': 'keep-alive', 'Referer': 'https://xxcapp.xidian.edu.cn/ncov/wap/default/index', 'Content-Length': '2314', # Cookie是身份標(biāo)識 'Cookie': 'Hm_lpvt_48b682d5d22a90111e44886b972e3268=1590108209; ' # Hm_lpvt_xxxxxxx 為當(dāng)前時間戳(秒) # Hm_lvt_xxx 為一串時間戳。最近的一次訪問時間戳追加在后面,最多保留4個時間戳??梢酝ㄟ^關(guān)閉瀏覽器然后再訪問相同頁面查看其cookie值來驗(yàn)證。 'Hm_lvt_48b682a90111e46b9d4885d2272e3268=1590108209; UUkey=99cf86f295b522e264680402bf6b221e; ' 'Uqn3iPIDZBpD3wJU=vqtbQwSD1sjDM; eai-sess=prshbd3vo96po8i27a4mod1i67', 'X-Requested-With': 'XMLHttpRequest', } data = { 'uid': '123671', 'date': str(datetime.date.today() - datetime.timedelta(days=1)).replace("-", ""), 'tw': '3', # 體溫:第三項(xiàng),36.5-36.9 'sfcxtz': '0', # 是否出現(xiàn) 'sfyyjc': '0', # 是否醫(yī)院檢查 'jcjgqr': '0', # 檢查結(jié)果確認(rèn) 'sfjcbh': '0', # 是否接觸病患 'sfcxzysx': '0', # 是否出現(xiàn) 'address': '', 'area': '', 'province': '', # 地址 'city': '', # 城市 # 伽利略定位系統(tǒng)詳情 'geo_api_info': '{"type":"complete","position":{"P":11.203296169705,"O":11.667691514757,"lng":11.667692,' '"lat":11.203296},"location_type":"html5","message":"Get ipLocation failed.Get geolocation ' 'success.Convert Success.Get address success.","accuracy":15,"isConverted":true,"status":1,' '"addressComponent":{"citycode":"0001","adcode":"123456","businessAreas":[],' '"neighborhoodType":"","neighborhood":"","building":"","buildingType":"","street":"",' '"streetNumber":"","province":"","city":"","district":"","township":""},' '"formattedAddress":"","roads":[],"crosses":[],"pois":[],' '"info":"SUCCESS"}', 'created': str(int(time.time())), # 創(chuàng)建時間 'sfzx': '0', # 是否在校 否 'sfjcwhry': '0', # 是否接觸武漢人員 否 'sfcyglq': '0', # 是否處于隔離期 否 'sftjwh': '0', # 是否途徑武漢 否 'sftjhb': '0', # 是否途徑湖北 否 'fjsj': '0', 'sfjchbry': '0', # 是否接觸湖北人員 否 'sfsfbh': '0', # 是否 'jhfjsftjwh': '0', # *****是否途徑武漢 否 'jhfjsftjhb': '0', # *****是否途徑湖北 否 'szsqsfybl': '0', 'sfygtjzzfj': '0', # 是否 'sfjcjwry': '0', # 是否接觸境外人員 否 'id': '4393912', 'ismoved': '0', # 與上次地點(diǎn)是否有不同 } sendEmail(eval(requests.post(url=url, data=data, headers=headers).text)['m'])
總結(jié)
到此這篇關(guān)于Python實(shí)現(xiàn)疫情通定時自動填寫功能(附代碼)的文章就介紹到這了,更多相關(guān)Python疫情通自動填寫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
終端能到import模塊 解決jupyter notebook無法導(dǎo)入的問題
這篇文章主要介紹了在終端能到import模塊 而在jupyter notebook無法導(dǎo)入的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03使用Python3 poplib模塊刪除服務(wù)器多天前的郵件實(shí)現(xiàn)代碼
這篇文章主要介紹了使用Python3 poplib模塊刪除多天前的郵件的實(shí)現(xiàn)代碼,代碼簡單易懂,非常不錯,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04基于python實(shí)現(xiàn)銀行管理系統(tǒng)
這篇文章主要介紹了基于python實(shí)現(xiàn)銀行管理系統(tǒng),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python項(xiàng)目制作的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04Python+Selenium實(shí)現(xiàn)在Geoserver批量發(fā)布Mongo矢量數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了如何利用Python+Selenium實(shí)現(xiàn)在 Geoserver批量發(fā)布來自Mongo中的矢量數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-07-07Python應(yīng)用03 使用PyQT制作視頻播放器實(shí)例
本篇文章主要介紹了Python使用PyQT制作視頻播放器實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12Python numpy.zero() 初始化矩陣實(shí)例
今天小編就為大家分享一篇Python numpy.zero() 初始化矩陣實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Pandas統(tǒng)計(jì)計(jì)數(shù)value_counts()的使用
本文主要介紹了Pandas統(tǒng)計(jì)計(jì)數(shù)value_counts()的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07