告別單調(diào)工作系列——利用python拯救漂亮妹子

image

最近在業(yè)務(wù)辦公區(qū)域?qū)有枨蟮臅r(shí)候,發(fā)現(xiàn)了一位漂亮妹子的「苦惱」,簡單來說就是她每天都得花一個(gè)多小時(shí)的時(shí)間去將整理好的數(shù)據(jù)錄入到系統(tǒng)中。

為什么是苦惱?

在進(jìn)入正題前想聊下這位漂亮妹子「不要想多了,只是聊聊漂亮妹子的工作」,這位妹子雖然苦惱,但她做這樣的事情已經(jīng)一年多了,可謂毅力可嘉,有時(shí)候我就會(huì)覺得很奇怪,為什么不向產(chǎn)品提個(gè)需求,要求系統(tǒng)能支持批量導(dǎo)入的功能呢?

和漂亮妹子聊了下,原來曾幾何時(shí)是提過類似的需求的,但因?yàn)閮?yōu)先級(jí),上級(jí)重視度等等一系列問題,最后就不了了之了。

漂亮妹子一開始還比較有怨言的,久而久之也就麻木了,最后成為了一種習(xí)慣...

老實(shí)講,對(duì)于這樣的工作狀態(tài)很不好,當(dāng)你的工作逐步趨向于重復(fù)性操作時(shí),你將很可能被替代。

于是,為了拯救這位漂亮妹子,利用pyhton搞了個(gè)腳本,能夠自動(dòng)讀取excel中的數(shù)據(jù)提交表單,完成錄入的操作,還提高了手動(dòng)錄入的準(zhǔn)確性。

妹子驚呆了,奶茶雙手奉上。

一些思路

其實(shí)類似這種錄入系統(tǒng),重復(fù)工作的場景真的有很多,有時(shí)候真的覺得很麻煩,尤其是遇到一些交互比較差,等待時(shí)間比較長的系統(tǒng)。

類似這種需求,基本上分這幾個(gè)步驟:

  1. 分析頁面
  2. 模擬登錄
  3. 組裝表單數(shù)據(jù)
  4. 循環(huán)提交

當(dāng)然,你同時(shí)也要具備一些技能和知識(shí):

  1. python「以python舉例,其他語言也可以實(shí)現(xiàn)」
  2. http 協(xié)議
  3. chrome調(diào)試「以chrome舉例,其他瀏覽器也可以」

具體實(shí)現(xiàn)

由于是公司的系統(tǒng),不太方便貼源碼,這里記錄下開發(fā)過程中的一些重點(diǎn)和坑。

首先是頁面分析,這個(gè)就不多說了,利用好強(qiáng)大的Chrome就可以了。

這里重點(diǎn)說說模擬登錄,往往這里是比較坑的,雖然內(nèi)網(wǎng)系統(tǒng)相對(duì)來說比較簡單,但還是碰到兩種常用的登錄校驗(yàn)?zāi)J健?/p>

一種是服務(wù)端會(huì)生成一個(gè)uuidstate,在提交登錄時(shí)會(huì)校驗(yàn)傳入的與服務(wù)端生成的是否一致。

這個(gè)時(shí)候你就要分析頁面,通常會(huì)將state放在頁面中

image

這樣就比較容易了,利用python的RequestsBeautifulSoup來抓取并實(shí)現(xiàn)登錄

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']

另一種是在登錄時(shí),前端將密碼加密,加密后再進(jìn)行提交,一開始沒注意,坑了我一把,于是將這段代碼翻譯成python的寫法

image
#密碼加密
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)

當(dāng)你順利模擬登錄成功后,其實(shí)就已經(jīng)成功過一大半了,后面無非就是組裝數(shù)據(jù),然后利用強(qiáng)大的Requests調(diào)用接口提交就可以了。

由于表單各不相同,代碼也沒什么好貼的,主要確認(rèn)好接口數(shù)據(jù)格式,是form-data的,還是json的,做好相應(yīng)的轉(zhuǎn)換即可。

另外還是要偽造下header的,尤其是User-Agent,避免被誤殺,或者被公司安全組查。

最后請(qǐng)求頻次也需要注意下,千萬不要用力過猛,把系統(tǒng)給搞掛了「雖然這種情況很少」。

最后的最后,貼下自己用到的模塊,都是比較常用的,網(wǎng)上也有一大堆的說明教程,有興趣的同學(xué)可以自行實(shí)戰(zhàn)下,創(chuàng)新工作,告別重復(fù)勞動(dòng)。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容