姓名:趙坤? ? 學(xué)號:20021210734
【嵌牛導(dǎo)讀】python語言由于其簡潔拉宗、靈活的語言特性咖祭,經(jīng)常被用來開發(fā)一些小工具來協(xié)助辦公,爬蟲就是其中廣泛應(yīng)用之一砾赔。網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛蝌箍,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間暴心,更經(jīng)常的稱為網(wǎng)頁追逐者)妓盲,是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本专普。通俗的講悯衬,爬蟲就是能夠自動訪問互聯(lián)網(wǎng)并將網(wǎng)站內(nèi)容下載下來的的程序或腳本,類似一個機(jī)器人脆诉,能把別人網(wǎng)站的信息弄到自己的電腦上甚亭,再做一些過濾贷币,篩選击胜,歸納,整理役纹,經(jīng)過整合的數(shù)據(jù)往往能產(chǎn)生更大的價值偶摔。爬蟲時,有的網(wǎng)站需要我們登錄后才能訪問關(guān)鍵信息促脉,如淘寶辰斋,必須登陸后才能看到自己收藏的商品。因此如何完成登錄操作是爬蟲技術(shù)的重要一環(huán)瘸味,web通信中的登錄宫仗,主要是通過cookie和session來進(jìn)行確認(rèn)的,今天我們就來分析一下xd一站式服務(wù)大廳的幾種登陸方案旁仿。
【嵌牛鼻子】python實現(xiàn)xd一站式登錄的3種方案
【嵌牛提問】還有其他登陸的方案嘛?
【嵌牛正文】如下:
一藕夫、如何判斷我們是否登錄成功?
可以使用如下網(wǎng)址進(jìn)行驗證:http://ehall.xidian.edu.cn/jsonp/userDesktopInfo.json在登陸成功時枯冈,瀏覽器已經(jīng)保存了認(rèn)證我們信息的cookie毅贮,因此在瀏覽器url欄中輸入該鏈接,可以請求到我們的個人信息(服務(wù)器認(rèn)為這是一個合法請求)尘奏。
圖一滩褥、正常登錄狀態(tài)下截圖
圖二、登陸成功時請求到的個人信息
如果是非登錄狀態(tài)下請求上述網(wǎng)頁炫加,則不會請求到任何數(shù)據(jù)瑰煎,如下圖所示:
圖三铺然、沒登錄狀態(tài)下請求到的響應(yīng)
接下來我們會在python代碼中請求這個網(wǎng)頁,如果能成功請求到數(shù)據(jù)酒甸,則說明我們已經(jīng)保持了登錄的狀態(tài)探熔。
二、方案一:獲取瀏覽器cookie保持登錄
正如前面提到的烘挫,當(dāng)我們在瀏覽器中輸入賬號诀艰、密碼,完成登錄操作后饮六,服務(wù)器會給瀏覽器返回一個cookie信息其垄,來存儲我們用戶的身份,因此我們只需要獲取到這個cookie卤橄,就可以在python代碼中也保持登陸狀態(tài)绿满,欺騙過服務(wù)器。
瀏覽器中獲取cookie的方式有很多窟扑,每個瀏覽器的操作也都大同小異喇颁,我們這里使用chrome進(jìn)行展示。
1嚎货、首先成功登錄進(jìn)入教務(wù)處橘霎,如上述圖一所示頁面;
2殖属、摁一下F12姐叁,喚起chrome的開發(fā)者工具,并點擊進(jìn)入Network標(biāo)簽下洗显,勾選下圖所示內(nèi)容外潜;
圖四、沒抓包時的devtools
3挠唆、如上提示所示处窥,摁下ctrl+R,強(qiáng)制刷新頁面玄组,然后再抓到的包中滔驾,任選一個user開頭的包,如我當(dāng)前選取的是userSearchHistory開頭的包巧勤,點擊這個包嵌灰,在response headers欄目下,復(fù)制出來其中的cookie信息即可颅悉。
圖五沽瞭、瀏覽器抓包獲取cookie
4、python模擬發(fā)送請求剩瓶,這里我們使用requests模塊發(fā)送上述提到的http://ehall.xidian.edu.cn/jsonp/userDesktopInfo.json請求驹溃,然后打印服務(wù)器返回的數(shù)據(jù)城丧,看看其中是否包含了圖二中展示的數(shù)據(jù)。
圖六豌鹤、數(shù)據(jù)請求代碼
根據(jù)圖七中的部分?jǐn)?shù)據(jù)亡哄,我們可以看到的確和圖二中的數(shù)據(jù)一致,成功請求到了我的個人信息數(shù)據(jù)布疙,方案一講解到此結(jié)束蚊惯。
圖七、部分返回數(shù)據(jù)截圖
三灵临、方案二:使用selenium完成模擬登錄并獲取cookie
Selenium簡介:Selenium?是一個用于Web應(yīng)用程序測試的工具截型。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣儒溉。支持的瀏覽器包括IE(7, 8, 9, 10, 11)宦焦,Mozilla Firefox,Safari顿涣,GoogleChrome波闹,Opera等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上涛碑。測試系統(tǒng)功能——創(chuàng)建回歸測試檢驗軟件功能和用戶需求精堕。支持自動錄制動作和自動生成?.Net、Java锌唾、Perl等不同語言的測試腳本锄码。
selenium和chrome driver安裝教程---沒有安裝的朋友可以參考這篇文章進(jìn)行環(huán)境配置
從上面的介紹可以知道,使用selenium實現(xiàn)登錄就是我們在python程序中預(yù)先制定好瀏覽器的操作流程晌涕,比如訪問什么網(wǎng)頁,需要點擊什么按鈕痛悯,在什么位置余黎、什么時間輸入什么內(nèi)容等等,實際上就是用代碼復(fù)現(xiàn)人類真實的與瀏覽器交互的行為载萌,代碼如下惧财。
圖八、數(shù)據(jù)請求代碼
圖九扭仁、模擬瀏覽器執(zhí)行動作過程
可以看到我們使用selenium也是成功獲取到了全部的cookie信息和最終要的個人數(shù)據(jù)垮衷。
圖十、執(zhí)行結(jié)果分析
四乖坠、方案三:使用http協(xié)議實現(xiàn) post 登錄并逆向加密js
1搀突、對教務(wù)處發(fā)起登錄的請求進(jìn)行抓包分析,發(fā)現(xiàn)登陸時提交的參數(shù)一共有如下7個熊泵,其中password是經(jīng)過加密的仰迁,It根據(jù)經(jīng)驗知道是服務(wù)器返回的一串標(biāo)識符甸昏,一般存在于網(wǎng)頁源碼中,后面四個參數(shù)都是固定不變的徐许,因此我們只要找到password和It就可以了施蜜。
圖十一、登錄抓包結(jié)果
2雌隅、經(jīng)過在網(wǎng)頁源碼中尋找翻默,我們定位到了如下內(nèi)容,都是隱藏的input標(biāo)簽恰起,可以看到It在其中冰蘑,并且其余的四個登陸相關(guān)參數(shù)也在其中。多次刷新網(wǎng)頁之后也可以驗證我們之前說的村缸,It是變動的祠肥,而其余四個字段是不變的,不過我們還發(fā)現(xiàn)了一個不曾見到的字段“pwdDefaultEncryptSalt”梯皿,根據(jù)經(jīng)驗知道這是加密算法需要的“鹽”邮辽。
圖十二活喊、網(wǎng)頁源碼分析
3、接下來就只剩password加密算法的定位了,在devtools中搜索password字段坎炼,成功定位到可能存在加密的位置,并且看到了加密算法AES使套,而且前面提到的pwdDefaultEncryptSalt也在此處得到了應(yīng)用病往,猜測應(yīng)該是這里了。
圖十三冤议、加密位置定位
4斟薇、重新發(fā)送一次登錄請求,看能否在此處斷下來恕酸,果然斷下來了堪滨,只不過走的是下面的流程,經(jīng)過驗證后_p1的確是前面猜測pwdDefaultEncryptSalt參數(shù)蕊温,_p0是我們輸入的密碼123456袱箱。接下來只需要解這個加密算法即可,跳到這個AES加密算法定義的位置看看义矛。
圖十四发笔、斷點效果
5、跳到了這個文件中凉翻,可以看到用的是標(biāo)準(zhǔn)的croptyJS加密的了讨,那我們就不用扣代碼了,直接在py中調(diào)用crypto庫就可以了---實際上這個代碼也非常的好扣,直接整個文件拿下來就可以了量蕊。
圖十五铺罢、AES加密算法定位
6、由于使用post協(xié)議登錄這部分極可能被濫用残炮,為了不給教務(wù)網(wǎng)站維護(hù)者造成困擾韭赘,這部分代碼就不公布出來了,按照以上思路來做是可以正常實現(xiàn)登錄的势就。希望以上分享大家能喜歡泉瞻,謝謝大家看到這里。