下麵介紹的是JUC包下一些線程安全類的一些簡單使用和一些小demo。 Semaphore 信號量,即可以同時使用的線程數,tryrequire就是將信號量減一,release就是信號量+1,當等於0就會阻塞,大於零才會喚醒。 當需要控制線程訪問數量,可以使用信號量來做控制,比較簡單。 下麵是使用信號 ...
在一些特殊的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 集中營】,專註於後端編程,每天更新技術乾貨,不定時分享各類資料!