在一些特殊的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辦公自動化應該學習哪些內容?
歡迎關注作者公眾號【Python 集中營】,專注于后端編程,每天更新技術干貨,不定時分享各類資料!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/477704.html
標籤:Python
