python執行js時,遇到document、window等對象的解決辦法

當我們分析爬蟲時,有時候會遇到一些加密參數,這個時候就需要我們逆向分析js

python執行js有一些第三方庫

https://www.jianshu.com/p/2da6f6ad01f0

因爲我用的Python3,所以沒用PyV8(安裝網上的方法,也沒有安裝好,可能我太笨了 - -! 如果有會的麻煩指點一下)

我用的比較多的就是js2py和execjs

有一次在分析js時,我已經找到了對應的加密方法,在瀏覽器上運行時,直接拿到了結果,開心的一匹

然我把js代碼複製下來,在Python裏通過js2py運行執行,發現報錯,說

ReferenceError: window is not defined

想到這個瀏覽器裏的對象,感覺很絕望,然後想到execjs依賴node執行,是否可以從這裏突破

結果依然不行,因爲在node裏也是隻能運行js語法,window 和 document等對象是沒有的

後面機緣巧合之下,找到node裏有一個庫jsdom,這個庫可以生成對應環境

https://www.npmjs.com/package/jsdom

全局安裝命令

npm i jsdom -g


可以看到導入後各種環境都有了,完美

所以我們只要在對應js代碼裏最前面加上以下代碼就能正常運行

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章