189 8069 5689

如何解析Python调用JavaScript代码-创新互联

这篇文章将为大家详细讲解有关如何解析Python调用JavaScript代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

成都创新互联网站建设提供从项目策划、软件开发,软件安全维护、网站优化(SEO)、网站分析、效果评估等整套的建站服务,主营业务为成都网站制作、网站设计,app软件开发以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。成都创新互联深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

准备阶段:

以一段简单的JS脚本为例,将代码写入到文件中,其中,定义了一个方法,计算两个数的和。

//norm.js
//计算两个数的和
function add(num1, num2) {
   return num1 + num2;
}

方法一、PyExecJS

PyExecJS 是使用最多的一种方式,底层实现方式是:在本地 JS 环境下运行 JS 代码支持的 JS 环境包含:Node.js、PyV8、PhantomJS、Nashorn 等

首先,我们需要安装依赖包 PyExecJS

//py_exec_js_demo.py
 
//安装依赖
pip3 install PyExecJS
然后,从 JS 文件中读取源码
def js_from_file(file_name):
    """
    读取js文件
    :return:
    """
    with open(file_name, 'r', encoding='UTF-8') as file:
        result = file.read()
 
return result
最后,使用 execjs 类的compile()方法编译加载上面的 JS 字符串,返回一个上下文对象
 
import execjs
 
from js_code import *
 
# 编译加载js字符串
context1 = execjs.compile(js_from_file('./norm.js'))
最后,调用上下文对象的call() 方法执行 JS 方法
其中,参数包含:JS 代码被调的方法名、对应方法的传入参数
 
# 调用js代码中的add()方法,参数为2和3
# 方法名:add
# 参数:2和3
result1 = context1.call("add", 2, 3)
 
print(result1)

需要注意的,由于 PyExecJS 运行在本地 JS 环境下,使用之前会启动 JS 环境,最终导致运行速度会偏慢。

方法二、js2py

js2py作为一个纯 Python 实现的 JS 解释器,可以完全脱离 JS 环境,直接将 JS 代码转换为 Python 代码

首先,安装依赖库

# 安装依赖库
pip3 install js2py
然后使用 js2py 中的EvalJs()方法生成一个上下文对象
# 使用获取上下js2py生成一个上下文环境
context = js2py.EvalJs()

接着利用上下文对象执行 JS 脚本,转换为 Python 代码

# 执行整段JS代码
context.execute(js_content)
最后,利用上下文调用 JS 中的方法,并制定输入参数即可
# 使用上下文context调用具体的函数
# 函数名:add
# 参数:1,2
result = context.add(1, 2)
print(result)

方式三、Node.js

实际上是使用 Python 的os.popen执行 node 命令,执行 JS 脚本

首先,确保本地已经安装了 Node.js 环境,修改 JS 脚本,新增一个导出函数 init ,方便内部函数被调用

//计算两个数的和
function add(num1, num2) {
    return num1 + num2;
}
 
//新增一个导出函数(node方式)
module.exports.init = function (arg1, arg2) {
    //调用函数,并返回
    console.log(add(arg1, arg2));
};

然后,将调用 JS 方法的命令组成一个字符串

# 组成调用js的命令
# node命令:node -e
cmd = 'node -e "require(\\"%s\\").init(%s,%s)"' % ('./norm', 3, 5)
最后,通过 os.popen 执行命令即可
pipeline = os.popen(cmd)
 
# 读取结果
result = pipeline.read()
 
print('结果是:', result)

关于如何解析Python调用JavaScript代码就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


分享标题:如何解析Python调用JavaScript代码-创新互联
链接URL:http://cdxtjz.cn/article/gsgic.html

其他资讯