最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python執(zhí)行JS代碼的三種方式

 更新時(shí)間:2024年01月09日 10:44:25   作者:銀古_(tái)1427  
以前的數(shù)據(jù)靠買(mǎi),現(xiàn)在的數(shù)據(jù)靠爬”,越來(lái)越多的學(xué)者通過(guò)網(wǎng)絡(luò)爬蟲(chóng)來(lái)獲取數(shù)據(jù),但是做爬蟲(chóng)的人都知道,現(xiàn)在的很多網(wǎng)站都在和我們斗智斗勇,防護(hù)普遍越來(lái)越好,破解JS加密只是第一步,之后就是如何在我們的Python代碼中直接執(zhí)行JS,下面介紹一下幾種Python中執(zhí)行JS代碼的方法

1. 使用 js2py

基本操作:

import js2py
 
 
# 執(zhí)行單行js語(yǔ)句
js2py.eval_js("console.log(abcd)")
>>> abcd
 
# 執(zhí)行js函數(shù)
add = js2py.eval_js("function add(a, b) {return a + b};")
print(add(1,2))
>>> 3
 
# 另一種方式
js = js2py.EvalJs({})
js.execute("js語(yǔ)句")

騷操作一: 在js代碼中引入python對(duì)象 或 python代碼

# 在js代碼中引入python對(duì)象
context = js2py.EvalJs({'python_sum': sum})
context.eval('python_sum(new Array(1,4,2,7))')
>>> 14
 
# 在js代碼中加入python代碼
js_code = '''
 var a = 10
 function f(x) {return x*x}
'''
context.execute(js_code)
context.f("14") 或 context.f(14)
>>> 196

騷操作二: 將js代碼轉(zhuǎn)為python模塊,再使用import 導(dǎo)入

# 轉(zhuǎn)換js文件
js2py.translate_file('example.js', 'example.py')
 
# 現(xiàn)在可以導(dǎo)入example.py
from example import example
example.someFunction()

詳見(jiàn):https://github.com/PiotrDabkowski/Js2Py

2. 使用 execjs

import execjs
 
js_code = open('file.js',encoding='utf-8').read()
ctx = execjs.compile(js_code)
 
# 第一個(gè)參數(shù)為ja代碼中的函數(shù)名, 后面為函數(shù)對(duì)應(yīng)的參數(shù)
result = ctx.call('function_name', *args)

3. 使用subprocess調(diào)用node子進(jìn)程

前面兩種只適合執(zhí)行少量js代碼的情況,當(dāng)有大量js代碼要執(zhí)行時(shí),還是建議直接調(diào)用node

import subprocess
 
# js文件最后必須有輸出,我使用的是 console.log
pro = subprocess.run("node abc.js", stdout=subprocess.PIPE)
# 獲得標(biāo)準(zhǔn)輸出
_token = pro.stdout
# 轉(zhuǎn)一下格式
token = _token.decode().strip()

關(guān)于執(zhí)行效率:

py2js有時(shí)候在加載一些加密函數(shù)的時(shí)候效率低的可憐,大概是因?yàn)閳?zhí)行機(jī)制的不同:

py2js直接調(diào)用的nodejs引擎不過(guò)這個(gè)庫(kù)用的nodejs解析語(yǔ)法樹(shù)轉(zhuǎn)成py代碼,性能挺低的,還不如直接用execjs調(diào)nodejs或自己封裝子進(jìn)程調(diào)用;execjs調(diào)用的pyv8,不過(guò)默認(rèn)的pyv8的引擎挺老的,es5好多特征都不支持

以上就是Python執(zhí)行JS代碼的三種方式的詳細(xì)內(nèi)容,更多關(guān)于Python執(zhí)行JS代碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

德安县| 永宁县| 开阳县| 玛纳斯县| 吉隆县| 光泽县| 高州市| 丹凤县| 利辛县| 高安市| 新化县| 财经| 林周县| 左云县| 峨山| 临高县| 沈阳市| 万载县| 临清市| 穆棱市| 虎林市| 上栗县| 南华县| 彰武县| 道孚县| 洪雅县| 新民市| 中西区| 玉屏| 延寿县| 安岳县| 攀枝花市| 兴隆县| 平陆县| 丰城市| 新河县| 吐鲁番市| 运城市| 博乐市| 绿春县| 米泉市|