做爬蟲過程中,常常有些web程序員,喜歡在網頁JS中做一些變量,常見的方法是用正則匹配。
但是如果有人用了複雜的JS,變量取不到,怎麼辦?直接用ececjs,在你的Python代碼中,
1、先下載獲取的網頁代碼,
2、提取網頁代碼中的js ,可以用正則表達式匹配,較爲簡單
3、接下來就是把取得的js代碼跑起來,下面就是如何把取得的代碼跑起來的過程。
使用execjs常見的一些報錯如下,網上我整理一下
1、解決window 未定義
2、解決$未定義
步驟如下
前提是安裝node.js
Windows下,cmd命令行下執行安裝
1、安裝jsdom
npm i jsdom -g
2、安裝 jquery 代碼如下
npm i jquery -g
3、查詢全局引用路徑,保存用於後面使用
npm root -g
返回(我的電腦的返回結果)
C:\Users\Administrator\AppData\Roaming\npm\node_modules
下面是在pycharm中編寫代碼
1、在JS代碼前添加如下
jsdomstr='''
var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = jQuery = require('jquery')(window);
'''
2、字符串組合
import execjs
txt_getUrl_js= ' function doit(){return 調用他人頁面中的變量; } '
strt=jsdomstr + 你下載的網頁中的js代碼 + 自定義js腳本代碼,用於你隨心所欲的調用別人的js生成的參數
#注意這一步:windows下使用如下命令,查詢 npm root -g
#得到 C:\Users\Administrator\AppData\Roaming\npm\node_modules
js=execjs.compile(strt,cwd=r'C:\Users\Administrator\AppData\Roaming\npm\node_modules')
result=js.call('doit')
print(result)
'下面就是自由發揮的時間,你可以查詢任何網頁中JS返回的參數。想用js攔住你的時代,過去了。
可以去試試你認爲不可能的網站,生成什麼ua,token等等。
—————