久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python爬蟲反反爬 | 像有道詞典這樣的 JS 混淆加密應該怎么破

 小帥b 2021-10-12

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

今天咱們就以有道詞典這個在線翻譯的網(wǎng)站為例,,看看他們是如何加密請求數(shù)據(jù)的,以及小帥b是如何通過 Python 模擬請求從而獲得關鍵數(shù)據(jù)的,。

咱們打開有道翻譯的網(wǎng)站:http://fanyi.youdao.com/

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

Hello, everyone, I'm Small handsome b.

哈哈哈,ok,,我們打開開發(fā)者工具,,按下 F12 來抓一下數(shù)據(jù),當我們點擊翻譯的時候,,可以看到有了一個請求:

點進去看可以發(fā)現(xiàn),,POST請求的地址是:

http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

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

可以看到,還是需要挺多參數(shù)的,,其中的 i 就是我們要翻譯的內(nèi)容,,那簡單啊~想要得到翻譯后的數(shù)據(jù),那么我們直接把請求頭和所需參數(shù)的值復制一下,,然后用 requests 請求一波不就搞定了,?

說干就干,代碼走起,!

定義一個請求的 url 和 headers

再把 form data 的數(shù)據(jù)整過來

requests 走起

運行一波

what,? 返回的是一個錯誤碼。

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

接下來就是:

學習 python 的正確姿勢

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

可以發(fā)現(xiàn),,每一次的請求中的 salt,、sign、ts,、bv 參數(shù)是會一直變化的。

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

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

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

發(fā)現(xiàn)有驚喜,直接幫我們把壓縮的 js 代碼格式化,。

牛逼不,,行號都給我們顯示出來了,不過到了這里,,依然懵逼,,我們還是不知道怎么拿到 salt、sign,、ts,、bv 這些參數(shù)的值...

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

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

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

http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

點擊 XHR/fetch BreakPoints 右邊的 + 號,,然后把鏈接復制進去:

這時候再點擊翻譯按鈕:

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

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

這些,,就是我們在點擊翻譯按鈕之后,會調(diào)用到 js 里面的方法,,從這里下手,,來尋找那些參數(shù)是被如何加密的,說實話,,用文字來說怎么去 debug 有點繁瑣..要不,,視頻走起?

(放大看)

挖槽,,我 1080p 的視頻被騰訊壓縮成 av 畫質(zhì),,但也不能否認我是全網(wǎng)第一良心博主有沒有,請叫我良心b?。,。?/span>

通過帥b的視頻,,相信你已經(jīng)知道了這些參數(shù)是如何加密的了,,那么接下來就可以通過 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 的方法就是這樣的:

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

這樣我們就使用了最正確的參數(shù)值來請求了,,運行一波:

cool~~~拿到數(shù)據(jù)啦,!順便說一句,,用到的庫有這么幾個:

完事了!

ps:覺得對你有幫助,,給我點個在看,,轉(zhuǎn)發(fā),贊賞,。讓帥b老仙,,一直法力無邊。另外,,接下來會有騷動作,,為了能讓你及時收到通知,趕緊把這個公眾號設置為星標,,以免到時虧得一批,,我們下回見,peace,!

掃一掃

學習 Python 沒煩惱

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多