Python PyExecjs --模拟执行JavaScript

如果逆向的 JavaScript 代码很复杂,使用 Python 重写不是一件很轻易的事;既然 JavaScript 已经实现了,那就使用 Python 第三方库 PyExecjs 模拟执行 JavaScript,得到执行后的结果

安装

1
pip3 install pyexecjs

依赖

PyExecjs 执行 JavaScript 的功能依赖 JavaScript 运行环境,Node.js 是其中之一,安装包地址:http://nodejs.cn/download/

查看运行环境

1
2
3
>>>import execjs
>>>print(execjs.get().name)
Node.js (V8)

如果使用的是 Node.js 则会输出 Node.js (V8)

实例

demo.js 文件:

1
2
3
4
function get_sum(a, b) {
const sum = a + b;
return sum;
}

Python 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import execjs

# JavaScript文件路径
file = './demo.js'
# 获取JavaScript运行环境
node = execjs.get()

# 获取JavaScript上下文对象
with open(file, 'r', encoding='utf-8')as f:
js_code = f.read()
context = node.compile(js_code)

# 模拟执行JavaScript代码
js = 'get_sum(2, 3)'
result = context.eval(js)
print(result)

输出结果:

1
5