天天看點

python爬蟲處理js混淆加密_python爬蟲反反爬 | 像有道詞典這樣的 JS 混淆加密應該怎麼破...

嘿嘿嘿,小帥b又來跟你說說一些爬蟲過程中需要鬥智鬥勇的事情了,這次咱們就來說說關于一些 JS 混淆加密的事。所謂 JS ,就是 JavaScript ,一種前端的腳本語言,一般情況下每個網站都需要 JS 來做一些資料互動,頁面渲染等一些異步操作。當然,對于反爬的人來說,JS 的用處還可以用來對一些資料進行加密。

今天咱們就以有道詞典這個線上翻譯的網站為例,看看他們是如何加密請求資料的,以及小帥b是如何通過 Python 模拟請求進而獲得關鍵資料的。

輸入中文然後點選翻譯按鈕就會翻譯出來英文,比如:

Hello, everyone, I'm Small handsome b.

哈哈哈,ok,我們打開開發者工具,按下 F12 來抓一下資料,當我們點選翻譯的時候,可以看到有了一個請求:

點進去看可以發現,POST請求的位址是:

我們再來看一下請求過去攜帶的參數是啥

可以看到,還是需要挺多參數的,其中的 i 就是我們要翻譯的内容,那簡單啊~想要得到翻譯後的資料,那麼我們直接把請求頭和所需參數的值複制一下,然後用 requests 請求一波不就搞定了?

說幹就幹,代碼走起!

定義一個請求的 url 和 headers

再把 form data 的資料整過來

requests 走起

運作一波

what? 傳回的是一個錯誤碼。

好的吧,如果是這麼簡單,小帥b何必寫這篇教程呢?如果你之前玩過加密相關的,那麼你應該對 form data 中的 salt、sign 這兩個字眼不陌生,那麼,如何破呢?

接下來就是:

學習 python 的正确姿勢

我們再點多幾次翻譯按鈕,然後就可以看到有多次請求。

可以發現,每一次的請求中的 salt、sign、ts、bv 參數是會一直變化的。

how to do it?我們回到 NetWork ,我們看到 Initiator 這一欄,可以看到它請求到了 fanyi.min.js:1 這個 js 檔案。

我們就點 fanyi.min.js:1 進去看看,牛的一比,直接看不懂...

還好,左下角有一個 {} ,可以點一下

發現有驚喜,直接幫我們把壓縮的 js 代碼格式化。

牛逼不,行号都給我們顯示出來了,不過到了這裡,依然懵逼,我們還是不知道怎麼拿到 salt、sign、ts、bv 這些參數的值...

咋辦?恩,Chrome浏覽器的打斷點功能在這個時候就要派上用場了。這時候還要把帥b語錄搬過來應景哈哈哈。

那麼如何使用斷點功能呢,我們看到 Chrome 的右邊是這樣的:

看到這個 XHR/fetch BreakPoints 沒,在這裡我們可以添加 url ,根據請求這個 url 打斷點。而我們要打的斷點就是一開始擷取到的請求 url :

點選 XHR/fetch BreakPoints 右邊的 + 号,然後把連結複制進去:

這時候再點選翻譯按鈕:

突然,你的螢幕一灰,表示好事将近,我們成功打上了斷點,也就是說,現在我們可以在請求之前做一些騷操作。

這時候我們将右邊的 Call Stack 展開:

這些,就是我們在點選翻譯按鈕之後,會調用到 js 裡面的方法,從這裡下手,來尋找那些參數是被如何加密的,說實話,用文字來說怎麼去 debug 有點繁瑣..要不,視訊走起?

python爬蟲處理js混淆加密_python爬蟲反反爬 | 像有道詞典這樣的 JS 混淆加密應該怎麼破...

Chrome如何debug 調試 js代碼https://www.zhihu.com/video/1130183428620136448

我是全網第一良心部落客有沒有,請叫我良心b!!!

通過帥b的視訊,相信你已經知道了這些參數是如何加密的了,那麼接下來就可以通過 Python 模拟了。

代碼走起!

ts 在 js 中是這樣的:

r = "" + (new Date).getTime()

那麼在 Python 中就是這樣的:

bv 在 js 中是這樣的:

n.md5(navigator.appVersion)

那麼它在 Python 中就是這樣的:

salt 在 js 中是這樣的:

r + parseInt(10 * Math.random(), 10)

那麼它在 Python 中就是這樣的:

sign 在 js 中是這樣的:

n.md5("fanyideskweb" + e + i + "@6f#X3=cCuncYssPsuRUE")

那麼它在 Python 中就是這樣的:

是以我們擷取 form data 的方法就是這樣的:

那麼我們的請求就可以這樣:

這樣我們就使用了最正确的參數值來請求了,運作一波:

cool~~~拿到資料啦!順便說一句,用到的庫有這麼幾個:

完事了!

ps:覺得對你有幫助,給我點個在看,轉發,贊賞。讓帥b老仙,一直法力無邊。另外,接下來會有騷動作,為了能讓你及時收到通知,趕緊關注這個公衆号并設定為星标,以免到時虧得一批,我們下回見,peace!

掃一掃

學習 Python 沒煩惱