Python模擬登錄的幾種方法
方法一:直接使用已知的cookie訪(fǎng)問(wèn)
方法二:模擬登錄后再攜帶得到的cookie訪(fǎng)問(wèn)
方法三:模擬登錄后用session保持登錄狀態(tài)
方法四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)
方法一:直接使用已知的cookie訪(fǎng)問(wèn)
使用已知的cookie來(lái)訪(fǎng)問(wèn),簡(jiǎn)單來(lái)說(shuō),就是——只要得到了別的客戶(hù)端的cookie树埠,我們就可以假冒成它來(lái)和服務(wù)器對(duì)話(huà)。這給我們的程序帶來(lái)了可乘之機(jī)怠李。
用cookie訪(fǎng)問(wèn)就會(huì)有一下的好處:
可配置到期規(guī)則 Cookie 可以在瀏覽器會(huì)話(huà)結(jié)束時(shí)到期,或者可以在客戶(hù)端計(jì)算機(jī)上無(wú)限期存在蛤克,這取決于客戶(hù)端的到期規(guī)則。
簡(jiǎn)單性 Cookie 是一種基于文本的輕量結(jié)構(gòu)夷蚊,包含簡(jiǎn)單的鍵值對(duì)构挤。
數(shù)據(jù)持久性 雖然客戶(hù)端計(jì)算機(jī)上 Cookie 的持續(xù)時(shí)間取決于客戶(hù)端上的 Cookie 過(guò)期處理和用戶(hù)干預(yù),Cookie 通常是客戶(hù)端上持續(xù)時(shí)間最長(zhǎng)的數(shù)據(jù)保留形式惕鼓。
在這里還是要推薦下我自己建的Python開(kāi)發(fā)學(xué)習(xí)群:483546416筋现,群里都是學(xué)Python開(kāi)發(fā)的,如果你正在學(xué)習(xí)Python 箱歧,小編歡迎你加入矾飞,大家都是軟件開(kāi)發(fā)黨,不定期分享干貨(只有Python軟件開(kāi)發(fā)相關(guān)的)呀邢,包括我自己整理的一份2018最新的Python進(jìn)階資料和高級(jí)開(kāi)發(fā)教程洒沦,歡迎進(jìn)階中和進(jìn)想深入Python的小伙伴
方法二:模擬登錄后再攜帶得到的cookie訪(fǎng)問(wèn)
原理:?我們先在程序中向網(wǎng)站發(fā)出登錄請(qǐng)求,也就是提交包含登錄信息的表單(用戶(hù)名价淌、密碼等)申眼。從響應(yīng)中得到cookie,今后在訪(fǎng)問(wèn)其他頁(yè)面時(shí)也帶上這個(gè)cookie蝉衣,就能得到只有登錄后才能看到的頁(yè)面括尸。
方法三:模擬登錄后用session保持登錄狀態(tài)
首先了解一下session的基本原理:瀏覽器和服務(wù)器采用http無(wú)狀態(tài)的通訊,為了保持客戶(hù)端的狀態(tài)病毡,使用session來(lái)達(dá)到這個(gè)目的濒翻。在session機(jī)制中,采用了一個(gè)唯一的session_id來(lái)標(biāo)示不同的用戶(hù)啦膜,瀏覽器每次請(qǐng)求都會(huì)帶上由服務(wù)器為它生成的session_id.
當(dāng)客戶(hù)端訪(fǎng)問(wèn)服務(wù)器時(shí)有送,服務(wù)器根據(jù)需求設(shè)置session,將會(huì)話(huà)信息保存在服務(wù)器上僧家,同時(shí)將標(biāo)示session的session_id傳遞給客戶(hù)端瀏覽器娶眷,
瀏覽器將這個(gè)session_id保存在內(nèi)存中(還有其他的存儲(chǔ)方式,例如寫(xiě)在url中)啸臀,我們稱(chēng)之為無(wú)過(guò)期時(shí)間的cookie届宠。瀏覽器關(guān)閉后烁落,這個(gè)cookie就清掉了,它不會(huì)存在用戶(hù)的cookie臨時(shí)文件豌注。以后瀏覽器每次請(qǐng)求都會(huì)額外加上這個(gè)參數(shù)值伤塌,再服務(wù)器根據(jù)這個(gè)session_id,就能取得客戶(hù)端的數(shù)據(jù)狀態(tài)轧铁。
方法四:使用無(wú)頭瀏覽器訪(fǎng)問(wèn)
無(wú)頭瀏覽器說(shuō)白了就是能模擬人工在有頭瀏覽器中的各種操作每聪。那自然很多人力活,都能使用無(wú)頭瀏覽器來(lái)做(比如上面這個(gè)下載 pdf 的過(guò)程齿风,其實(shí)是人力打開(kāi)每一個(gè)文章頁(yè)面药薯,然后按 ctrl+p 或 command+p 保存到本地的自動(dòng)化過(guò)程)。
無(wú)頭瀏覽器列舉:
PhantomJS:基于QtWebkit的無(wú)頭瀏覽器救斑,第一看到PhantomJS以為是一個(gè)NodeJS的模塊童本,其實(shí)PhantomJS和NodeJS的處于同等級(jí)別的應(yīng)用,兩者毫無(wú)關(guān)系脸候。唯一有聯(lián)系的就是他們使用的開(kāi)發(fā)語(yǔ)言都是javascript
SlimerJS:基于Gecko的無(wú)頭瀏覽器穷娱,SlimerJS和PhantomJS基本兼容,就是一個(gè)內(nèi)核換成了Gecko的PhantomJS
HtmlUnit:純java開(kāi)發(fā)的無(wú)頭瀏覽器运沦,完全java開(kāi)發(fā)泵额,javascript引擎使用的是Rhnio,由于不是基于Webkit携添、Gecko等主流內(nèi)核開(kāi)發(fā)嫁盲,兼容性不好
最后
前幾天有私信小編要Python的學(xué)習(xí)資料,小編整理了一些有深度的Python教程和參考資料烈掠,從入門(mén)到高級(jí)的都有亡资,文件已經(jīng)打包好了,正在學(xué)習(xí)Python的同學(xué)可以下載學(xué)習(xí)學(xué)習(xí)向叉。文件下載方式關(guān)注微信公眾號(hào):程序員大牛锥腻,即可下載。首先把代碼擼起來(lái)母谎!首先把代碼擼起來(lái)瘦黑!首先把代碼擼起來(lái)!重要的事說(shuō)三遍奇唤,哈哈幸斥。“編程是門(mén)手藝活”咬扇。什么意思甲葬?得練啊。