python执行js代码

一. 下载

# 下载: 
pip3 install PyExecJS

# 注意: 使用execjs必须下载node.js程序,它是js代码运行所依赖的环境

二. 方法介绍

eval()
输入参数:source(JS语句)、cwd(路径)
返回值:result(语句执行结果)

compile()
输入参数:source(JS语句)、cwd(路径)
返回值:编译后的对象

call()
输入参数:name(要调用的JS方法名称)、*args(方法所需要的参数,可多个)
返回值:result(运行方法的返回结果)

三. 基本使用: 执行函数和获取变量

test.js

// 函数
function func(name, age) {
    return `name:${name}. age:${age}`
}

// 变量
let name = "12353454";

test.py

import execjs

# open后跟所执行的js文件位置,call后第一个单引号引起来的为所执行的js文件的某个function,
with open('test.js', 'r', encoding='utf-8') as f:
    docjs = execjs.compile(f.read())
    res = docjs.call('func', 'yang', 18)
    print(res)  # name:yang. age:18

    res = docjs.eval('name')
    print(res)  # 12353454

四. 进阶使用: 加载window对象

# 下载:
cnpm install jsdom

test.js

// 声明模拟浏览器环境
const jsdom = require("jsdom");
const {JSDOM} = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest;

let browserName = window.navigator.userAgent;

test.py

import execjs

with open('test.js', 'r', encoding='utf-8') as f:
    docjs = execjs.compile(f.read())
    res = docjs.eval('browserName')
    print(res)  # Mozilla/5.0 (win32) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/16.4.0
    
    
# 注意:
'''
如果python环境中没有window对象, 需要下载jsdom. 并在.js文件头部声明.
如果没有声明将会抛出异常: execjs._exceptions.ProgramError: ReferenceError: window is not defined
'''    
posted @ 2020-08-16 21:32  给你加马桶唱疏通  阅读(655)  评论(0编辑  收藏  举报