python爬蟲-攜程-eleven參數

攜程-eleven分析

一、eleven的位置

通過對旁邊棧的分析,它是在另一個js文件中調用的。那個js文件是一個自調用的函數,所以我們可以直接copy下來,用瀏覽器執行看看

執行運行是會報錯的,undefind沒有call屬性

經過調試發現,報錯這裡是想調用window下面的某一個函數,也就是這個對象屬性key為29對應的值

所以我們需要將這個函數添加進去

我們再運行一次,這樣就不會報錯了

雖說能夠成功運行,不報錯,但是本地生成的eleven的值是跟攜程官網生成的eleven是不一樣的

三、解決方案

這段js代碼,肯定是對某一些做了判斷,我當時猜想過cookie,因為我就是在瀏覽器中運行,瀏覽器的一些標識肯定都是一樣,又區別的地方應該就是cookie吧。我就就一步一步的調試這這一大段js代碼,講真確實讓人看得頭疼

剛開始看確實沒多少耐心,點的也很快,也沒什麼技巧。

有一個老哥說,他能在瀏覽器執行那段js代碼,並且與攜程官網的參數能對上。他是新建一個窗口瀏覽器,通過控制台將js代碼copy,再進行調用,我試了下真的可以。我就很奇怪了,那就排除跟cookie有關了。

後面我還是繼續調試那段js代碼(我是在攜程網站進行調試的),發現那段js調用了3這個位置的函數,是一個require函數,每次調用都拋了異常,它有異常捕捉的代碼,所以不會崩掉。

我再調試着本地代碼,發現我是沒有這個函數的,我再去新建一個瀏覽器窗口,window.require輸出為一個函數,這下終於知道哪裡不對了

所以我只需要在3那個位置添加這個函數就行了,上面也說過,攜程網站它調用這個函數都是拋異常的,所以我們這樣寫就好了。

為了防止巧合,我試了很多次,本地和線上生成的eleven都只差一位,意思是說他肯定還對某一項做了檢測。


四、補充

需要注意的幾個函數,不是說其他函數不重要,也很重要,但這個比較關鍵。

五、node環境

再弄node環境之前,必要瀏覽器執行後的eleven要和攜程網的對得上,node環境缺什麼,報什麼錯,再跟本地瀏覽器進行調試。過程肯定不是一帆風順,但是解出來的時候,會莫名激動