利用Python執行js
爬蟲中會經常碰到JS加密,當我們找到他加密的JS代碼之后我們需要獲取它的返回值,python雖然可以模仿js寫一個python版本的加密,但是這樣有點費時間,也有點費頭發~
安裝PyexecJS
注意:這塊需要一個執行js的環境,我本地裝的是NodeJS
pip install pyexecjs
執行JS
舉一個例子如下:
import execjs
js = execjs.compile(''' function genpvid() {
var a = (new Date).getTime();
var b = "xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, function(b) {
var c = (a + 16 * Math.random()) % 16 | 0;
return a = Math.floor(a / 16),
("x" == b ? c : 3 & c | 8).toString(16)
});
return b
}''')
result = js.call('genpvid') #call里面的參數第一個是js函數名稱,如果要執行的js有參數,后面跟上參數就可以,如js.call('getpvid',2,3)這樣
print(result)
結尾
這個的缺點是需要執行JS的環境,如果不想安裝nodejs,可以試試另一個庫PyV8/js2py(js2py將 JS 代碼直接轉譯成 Python 代碼)