1. 程式人生 > 其它 >兩個庫搞定python中引用javascript程式碼塊/檔案

兩個庫搞定python中引用javascript程式碼塊/檔案

在一些特殊的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辦公自動化應該學習哪些內容?