javascript
java 爬虫 保存cookies_写爬虫,免不了要研究JavaScript设置cookies的问题
那天碰到這樣一個網(wǎng)頁,用瀏覽器打開很正常。然而用requests下載URL卻得到“521”的狀態(tài)碼,返回的內(nèi)容是一串壓縮混淆的JavaScript代碼。就是下面這個樣子:
返回的是JavaScript就好說了。肯定是瀏覽器運行這段JavaScript后,再次加載就可以得到真實網(wǎng)頁內(nèi)容了。
那么問題來了,這段js代碼都做了些什么呢?
我們先觀察一下瀏覽器的加載過程。因為你已經(jīng)成功打開了這個網(wǎng)頁,瀏覽器已經(jīng)記住了某些關(guān)鍵的cookies,所以你要先把cookies刪除。
如何刪除Chrome瀏覽器記錄的某個網(wǎng)站的cookies呢?
打開Chrome的settings,按這個路徑尋找cookies刪除的地方:Advanced -> Content Settings -> Cookies -> See all cookies and site data 。
然后在右上角的搜索欄搜索 mps.gov 就可以看到這個網(wǎng)站對應(yīng)的cookies,把它們都刪除即可。
打開瀏覽器的Network,選中“Preserve log”,記住加載的歷史,然后用瀏覽器重新打開這個網(wǎng)址:
http://www.mps.gov.cn/n2253534/n2253535/index.html
可以看到Network記錄的加載過程:
觀察發(fā)現(xiàn),第一次返回了521,然后停頓片刻(實際上是1.5秒,后面js代碼可以看到)再次加載該網(wǎng)頁,可以得到正確的網(wǎng)頁內(nèi)容。
對比兩次請求的cookies,可以發(fā)現(xiàn)第二次多了些cookies。這些cookies有可能就是521時返回的js寫進(jìn)去的。那么我們就來研究一下這段js代碼。
首先,我們需要一個js格式化的工具來幫助我們研究這段js代碼。工具很多,我們使用 https://beautifier.io/ 。把代碼copy到beautifier的網(wǎng)頁格式化一下:
先來理解一下這段代碼,1-16行沒什么特別的。16行要eval()一段js代碼字符串,這個很關(guān)鍵,看看它是什么。把 eval 改成 console.log,然后按F12調(diào)出Chrome的開發(fā)者工具,把全部js代碼copy到 Chrome的Console運行一下:
這時候,我們可以看到控制臺輸出了一段js的代碼,把這段代碼再copy到beautifier網(wǎng)頁格式化一下:
第4行可以看到,是給 document.cookie 賦值了,也就是給瀏覽器寫入的一個名為 __jsl_clearance 的cookie。這個cookie的生成跟第4行最后那個 function 有關(guān),看代碼的樣子,又是一段加密算法。
我們可以讀懂這個function的實現(xiàn)用Python實現(xiàn)算法,但實際上這段代碼太難讀懂了。我們可以借助Python的 ExecJS、PyV8這樣的模塊來運行這段js同樣也可以得到cookie的值。
總結(jié)
以上是生活随笔為你收集整理的java 爬虫 保存cookies_写爬虫,免不了要研究JavaScript设置cookies的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java build返回空值_将来与Fl
- 下一篇: java代码是怎么运行的_Java代码是