python执行JavaScript代码

1.简单使用

import execjs

execjs.eval("new Date")
返回值为: 2018-04-04T12:53:17.759Z
execjs.eval("Date.now()")
返回值为:1522847001080  # 需要注意的是返回值是13位, 区别于python的time.time()

2. 调用函数

execjs执行语法

import execjs

jsFunc = '''
    function add(x,y){
    return x+y;
    }
'''
jscontext = execjs.compile(jsFunc)
a = jscontext.call('add',3,5)
print(a)
# 可识别字符串,元组,字典,列表等

python中调用js文件使用js方法

1,首先通过,get_js方法,读取本地的 des_rsa.js 文件。2,调用 execjs.compile() 编译并加载 js 文件内容。3,使用call()调用js中的方法

import execjs  
#执行本地的js  
   
def get_js():  
    # f = open("D:/WorkSpace/MyWorkSpace/jsdemo/js/des_rsa.js",'r',encoding='UTF-8')  
    f = open("./js/des_rsa.js", 'r', encoding='UTF-8')  
    line = f.readline()  
    htmlstr = ''  
    while line:  
        htmlstr = htmlstr + line  
        line = f.readline()  
    return htmlstr  
   
jsstr = get_js()  
ctx = execjs.compile(jsstr)  
print(ctx.call('enString','123456'))

调用单个function函数

function generateUUID() {
    var d = (new Date).getTime()
      , a = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(a) {
        var r = (d + 16 * Math.random()) % 16 | 0;
        return d = Math.floor(d / 16),
        ("x" == a ? r : 7 & r | 8).toString(16)
    });
    return a
}

例如有上面这段JS,我目前不清楚如何去翻译,所以直接偷懒:

def generate_uuid():
    js = """
    function generateUUID() {
        var d = (new Date).getTime()
          , a = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(a) {
            var r = (d + 16 * Math.random()) % 16 | 0;
            return d = Math.floor(d / 16),
            ("x" == a ? r : 7 & r | 8).toString(16)
        });
        return a
    }
    """
    ctx = execjs.compile(js)
    return ctx.call("generateUUID")

3. 执行JS的环境

  • 在windows上不需要其他的依赖便可运行execjs, 也可以调用其他的JS环境
windows 默认的执行JS的环境
execjs.get().name
返回值: JScript

作者本人的windows上装有Node.js , 所以返回值不同
execjs.get().name
返回值: Node.js (V8)

PyExecJS的缺点之一就是性能。PyExecJS通过文本传递JavaScript运行时,并且速度很慢。另一个缺点是它不完全支持运行时特定的功能。对于某些用例,PyV8可能是更好的选择。

参考资料:https://github.com/meatjam/PyExecJS

Python调用JavaScript代码 - 知乎

你可能感兴趣的:(javascript,开发语言,ecmascript)