兩個庫搞定python中引用javascript程式碼塊/檔案
阿新 • • 發佈:2022-05-18
在一些特殊的python應用場景下需要逆向執行javascript程式碼塊或者.js檔案,比如:爬蟲的時候下載下來的html頁面中包含你要逆向執行的js程式碼塊。
在python程式設計中提供了兩個非標準庫js2py與PyExecJS都能實現在python中執行程式碼塊的效果的。
1、js2py的使用過程
js2py適用於js程式碼少量情況,如果用於很長的混淆的js程式碼,轉譯過來的大概率會報錯。
# 使用pip的方式安裝: pip install js2py
執行js程式碼塊的方式來執行程式碼
import js2py # 匯入js2py處理庫 # 建立javascript程式碼塊的python字串 js_code = ''' var date = new Date().getTime() ''' 呼叫 js2py.eval_js函式執行javascript程式碼塊 result = js2py.eval_js(js_code) print(result) # 1648984478464
執行js檔案的方式來執行程式碼
# 建立一個javascript檔案hello_world.js
#
# function hello_world(name){
# return name;
# }
hello_world = js2py.eval_js(open('./hello_world.js', 'r', encoding='utf-8').read())
print(hello_world("公眾號:Python 集中營"))
# 我是 公眾號:Python 集中營
2、PyExecJS的使用過程
通過python程式碼去執行JavaScript程式碼的庫,依賴於javascript執行環境,最好可以裝個node.js,相比於js2py,他可以執行多一點的js程式碼。
使用pip的方式安裝: pip install PyExecJS
import execjs # 匯入execjs處理庫
print(execjs.get().name) # 獲取javascript的預設執行環境
# Node.js (V8)
我的windows上面預設的js環境是nodejs,當然是用作業系統預設的js環境也是OK的。
執行一下剛剛上面建立的hello_world.js檔案。
# 需要先將即將執行的程式碼塊編譯一下 compile_code = execjs.compile(open('./hello_world.js', 'r', encoding='utf-8').read()) # 使用編譯後的程式碼塊call函式呼叫js檔案中的hello_world函式 result = compile_code.call('hello_world','python') print(result) # python
還可以使用eval函式進行呼叫
result = compile_code.eval("hello_world('python')")
print(result)
# python
當然,也可以像js2py一樣直接執行js程式碼塊的。
result = execjs.eval('""+ new Date().getTime()')
print(result)
# 1648986998002
注意:使用execjs執行javascript程式碼塊時,如果使用中文會出現亂碼的情況不能自動轉換編碼。並且在中/英文混用的時候會出現報錯的情況。
【往期精彩】
python實現excel資料與mysql資料庫互通有無!
python 實現超快視窗截圖,自動獲取當前活動視窗並展示截圖...
怎麼用python做一個解壓縮小工具,以後再也不用下載各種格式的解壓縮軟體了...
python中最簡單的turtle繪圖:奧運五環!
知識彙總:python辦公自動化應該學習哪些內容?