在一些特殊的python應用場景下需要逆向執(zhí)行javascript代碼塊或者.js文件,比如:爬蟲的時候下載下來的html頁面中包含你要逆向執(zhí)行的js代碼塊。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:申請域名、虛擬空間、營銷軟件、網(wǎng)站建設、貞豐網(wǎng)站維護、網(wǎng)站推廣。
【閱讀全文】
在python編程中提供了兩個非標準庫js2py與PyExecJS都能實現(xiàn)在python中運行代碼塊的效果的。
1、js2py的使用過程
js2py適用于js代碼少量情況,如果用于很長的混淆的js代碼,轉譯過來的大概率會報錯。
# 使用pip的方式安裝: pip install js2py
執(zhí)行js代碼塊的方式來運行代碼
import js2py # 導入js2py處理庫
# 創(chuàng)建javascript代碼塊的python字符串
js_code = '''
var date = new Date().getTime()
'''
調(diào)用 js2py.eval_js函數(shù)執(zhí)行javascript代碼塊
result = js2py.eval_js(js_code)
print(result)
#
執(zhí)行js文件的方式來運行代碼
# 創(chuàng)建一個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代碼去執(zhí)行JavaScript代碼的庫,依賴于javascript運行環(huán)境,最好可以裝個node.js,相比于js2py,他可以運行多一點的js代碼。
使用pip的方式安裝: pip install PyExecJS
import execjs # 導入execjs處理庫
print(execjs.get().name) # 獲取javascript的默認執(zhí)行環(huán)境
# Node.js (V8)
我的windows上面默認的js環(huán)境是nodejs,當然是用操作系統(tǒng)默認的js環(huán)境也是OK的。
執(zhí)行一下剛剛上面創(chuàng)建的hello_world.js文件。
# 需要先將即將執(zhí)行的代碼塊編譯一下
compile_code = execjs.compile(open('./hello_world.js', 'r', encoding='utf-8').read())
# 使用編譯后的代碼塊call函數(shù)調(diào)用js文件中的hello_world函數(shù)
result = compile_code.call('hello_world','python')
print(result)
# python
還可以使用eval函數(shù)進行調(diào)用
result = compile_code.eval("hello_world('python')")
print(result)
# python
當然,也可以像js2py一樣直接執(zhí)行js代碼塊的。
result = execjs.eval('""+ new Date().getTime()')
print(result)
#
注意:使用execjs執(zhí)行javascript代碼塊時,如果使用中文會出現(xiàn)亂碼的情況不能自動轉換編碼。并且在中/英文混用的時候會出現(xiàn)報錯的情況。
【往期精彩】
python實現(xiàn)excel數(shù)據(jù)與mysql數(shù)據(jù)庫互通有無!
python 實現(xiàn)超快窗口截圖,自動獲取當前活動窗口并展示截圖...
怎么用python做一個解壓縮小工具,以后再也不用下載各種格式的解壓縮軟件了...
python中最簡單的turtle繪圖:奧運五環(huán)!
知識匯總:python辦公自動化應該學習哪些內(nèi)容?