去年下半年申請(qǐng)了居轉(zhuǎn)戶,據(jù)說(shuō)最多要等1年半,所以偶爾會(huì)要去上海居轉(zhuǎn)戶的網(wǎng)站上查詢一下?tīng)顟B(tài)。
既然是重復(fù)性的勞動(dòng),那就寫(xiě)個(gè)腳本來(lái)處理吧。
用Chrome抓包,分析一下網(wǎng)頁(yè)的表單,然后用python的各種庫(kù)發(fā)送請(qǐng)求、解析驗(yàn)證碼,最后得到結(jié)果。
工具放在了github上,執(zhí)行,把,替換成自己的身份證號(hào)、密碼,或者設(shè)置為環(huán)境變量即可。
結(jié)果大概長(zhǎng)這樣:
首先通過(guò)Chrome把登錄網(wǎng)站、查詢的過(guò)程抓成har包,方便之后分析。
整個(gè)過(guò)程包含:
第一次HTTPGET訪問(wèn)網(wǎng)站,得到cookie(即requests里的session)
發(fā)送一次HTTPGET請(qǐng)求驗(yàn)證碼
發(fā)送一次HTTPPOST把用戶名、密碼、驗(yàn)證碼發(fā)送到網(wǎng)站
成功登陸后,發(fā)送一次HTTPPOST點(diǎn)擊”我接受”的按鈕
進(jìn)入后續(xù)的頁(yè)面,再發(fā)送一次HTTPGET點(diǎn)擊”我的申報(bào)信息”的按鈕
這個(gè)過(guò)程本身很簡(jiǎn)單,這里只記錄幾個(gè)要注意的點(diǎn):
用戶名是經(jīng)過(guò)處理的,具體是md5.js里這個(gè)函數(shù),把字符串作為hex值然后算md5就可以了;
密碼是明文,通過(guò)HTTP發(fā)送的,政府的網(wǎng)站無(wú)力吐槽。。。
通過(guò)解析驗(yàn)證碼不一定每次都成功,如果失敗,可以再試一次,之后可以在這個(gè)腳本的基礎(chǔ)上加一個(gè)retry
用解析網(wǎng)頁(yè),發(fā)現(xiàn)這里面table的格式實(shí)現(xiàn)是——太不規(guī)則了。目前只能hardcode來(lái)得到最后的結(jié)果。所以如果網(wǎng)頁(yè)稍微有點(diǎn)變化,這個(gè)腳本可能就需要更新。
這個(gè)網(wǎng)站開(kāi)放時(shí)間不是全天,而是8:00至22:00。?而22:00至次日8:00是打不開(kāi)的。。。
然后把這個(gè)腳本設(shè)個(gè)crontask定期跑一下,結(jié)果通過(guò)郵件發(fā)送給自己,就不再需要自己去網(wǎng)站上check啦!
最后,附上github的code:?