找到關鍵請求以後,就要分析請求,而後去構造請求。分析請求有一下幾個要素,url,請求方法,請求頭,請求參數。html
請求參數有七個,能夠經過反覆請求而後比較的方法得出from
,to
是表示翻譯語言的,transtype
,simple_means_flags
這兩個的值沒有變。最關鍵的是query
,sign
,token
參數,其中query
是要查詢的單詞字符串。sign
和token
須要分析。python
請求的參數有三個來源ajax
第一個請求返回的頁面html源碼中瀏覽器
前面的某次請求返回的數據cookie
請求以前由js動態生成ide
打開百度翻譯頁面源碼,複製上面請求中token
的值而後搜索,果真在頁面源碼中發現了token
的值。函數
通過分析,發現sign
的值隨着單詞的不一樣而不一樣,而且由於當前請求是ajax的,因此sign
必定是js動態生成的。工具
js逆向的三種方法測試
經過頁面元素觸發函數進行定位請求執行js代碼url
經過開發者調試工具network
選項中的initiator
欄進行定位
經過搜索參數名進行定位
我把sign搜它出來發現sign函數
去這是js看下
打斷點,回車,運行下js
最後一步一步來調試
很快找到了來源
發現處理的方法就是e
,n
兩個函數,經過PyExecJS
模塊進行js測試。由於這js函數看不懂,不建議改寫成python函數,將這兩段函數代碼複製到文本中,保存爲baidu.js
文件
PyExecJS是一個實現經過python執行js代碼的庫。
安裝:
$ pip install PyExecJS
PyExecJS入門
直接運行e
,n
兩個函數
分析js代碼,發現其中有個window
的變量,原來window
沒定義
不知道它是啥,打斷點,看下啥東西
window[gbk] ,window不就是一個變量來的,去看下local變量
local沒有,看global
在window中尋找gbk
在js先用"320305.131321201" 代替window[l],運行
這就是我找了很久的的sign
是否是每一個單詞的sign都是同樣的呢?
嘗試到html頁面中去查找,發現是一個在html頁面中定義的變量。
這是個固定值,能夠直接寫成常量,也能夠取頁面獲取。
思路
利用正則將頁面的token拿下來
window[gbk]是固定的,封裝函數來獲得sign
這裏有個神坑:發現頁面請求了兩次,第一次的頁面token
不是合法token
。
用seesion來訪問保存cookie這樣成功率高點
聲明:本文只作技術交流,不提供源碼,若有侵權,請告知刪除,謝謝。
一直原創,從未轉載
請認準我,將我置標
轉發,好看支持一下,感謝