利用python挽救心儀的女神,解決了她工作的煩惱
最近在業務辦公區域對接需求的時候,發現了一位漂亮妹子的「苦惱」,簡單來說就是她每天都得花一個多小時的時間去將整理好的資料錄入到系統中。
學習Python中有不明白推薦加入交流裙
號:735934841
群裡有志同道合的小夥伴,互幫互助,
群裡有免費的視訊學習教程和PDF!
為什麼是苦惱?
在進入正題前想聊下這位漂亮妹子「不要想多了,只是聊聊漂亮妹子的工作」,這位妹子雖然苦惱,但她做這樣的事情已經一年多了,可謂毅力可嘉,有時候我就會覺得很奇怪,為什麼不向產品提個需求,要求系統能支援批量匯入的功能呢?
和漂亮妹子聊了下,原來曾幾何時是提過類似的需求的,但因為優先順序,上級重視度等等一系列問題,最後就不了了之了。
漂亮妹子一開始還比較有怨言的,久而久之也就麻木了,最後成為了一種習慣...
老實講,對於這樣的工作狀態很不好,當你的工作逐步趨向於重複性操作時,你將很可能被替代。
於是,為了拯救這位漂亮妹子,利用pyhton搞了個指令碼,能夠自動讀取excel中的資料提交表單,完成錄入的操作,還提高了手動錄入的準確性。
妹子驚呆了,奶茶雙手奉上。
一些思路
其實類似這種錄入系統,重複工作的場景真的有很多,有時候真的覺得很麻煩,尤其是遇到一些互動比較差,等待時間比較長的系統。
類似這種需求,基本上分這幾個步驟:
- 分析頁面
- 模擬登入
- 組裝表單資料
- 迴圈提交
當然,你同時也要具備一些技能和知識:
- python「以python舉例,其他語言也可以實現」
- http 協議
- chrome除錯「以chrome舉例,其他瀏覽器也可以」
具體實現
由於是公司的系統,不太方便貼原始碼,這裡記錄下開發過程中的一些重點和坑。
首先是頁面分析,這個就不多說了,利用好強大的Chrome就可以了。
這裡重點說說模擬登入,往往這裡是比較坑的,雖然內網系統相對來說比較簡單,但還是碰到兩種常用的登入校驗模式。
一種是服務端會生成一個uuid的state,在提交登入時會校驗傳入的與服務端生成的是否一致。
這個時候你就要分析頁面,通常會將state放在頁面中
這樣就比較容易了,利用python的Requests和BeautifulSoup來抓取並實現登入
session_requests=requests.session() result=session_requests.get(login_url,headers=header) tree=bs4.BeautifulSoup(result.text,'lxml') state=tree.findAll('input',attrs={'name':'state'})[0]['value']
另一種是在登入時,前端將密碼加密,加密後再進行提交,一開始沒注意,坑了我一把,於是將這段程式碼翻譯成python的寫法
#密碼加密 def deal_password(pwd): key='asdrft745' keylength=10 code='' i=0 for item in pwd: keyindex=i%keylength code=code+chr(ord(item)^ord(key[keyindex:keyindex+1])) i=i+1 bytesString = code.encode(encoding="utf-8") return base64.b64encode(bytesString)
當你順利模擬登入成功後,其實就已經成功過一大半了,後面無非就是組裝資料,然後利用強大的Requests呼叫介面提交就可以了。
由於表單各不相同,程式碼也沒什麼好貼的,主要確認好介面資料格式,是form-data的,還是json的,做好相應的轉換即可。
另外還是要偽造下header的,尤其是User-Agent,避免被誤殺,或者被公司安全組查。
最後請求頻次也需要注意下,千萬不要用力過猛,把系統給搞掛了「雖然這種情況很少」。
最後的最後,貼下自己用到的模組,都是比較常用的,網上也有一大堆的說明教程,有興趣的同學可以自行實戰下,創新工作,告別重複勞動。
女神看完我的操作都驚呆了,以後再也不用花時間重複錄入資料了,奶茶雙手奉上啊,無形中為自己的形象分添色了不少,哈哈。