python使用execjs执行含有window等对象的js代码

2022-03-02 13:50:05 浏览数 (1)

当我们分析爬虫时,有时候会遇到一些加密参数,这个时候就需要我们逆向分析js

python执行js有一些第三方库

所以我们只要在对应js代码里最前面加上以下代码就能正常运行

代码语言:javascript复制
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;

在全局安装jsdom后,在node里按上面的写法是没有问题的,但是我们要在python中使用的话,不能在全局安装 如果在全局安装,使用时会报如下错误,说找不到jsdom

代码语言:javascript复制
execjs._exceptions.ProgramError: Error: Cannot find module 'jsdom'

解决办法有两种 1.就是在python执行文件所在的运行目录下,使用npm安装jsdom 2. 使用cwd参数,指定模块的所在目录,比如,我们在全局安装的jsdom,在cmd里通过npm root -g 可以查看全局模块安装路径: C:Usersw001AppDataRoamingnpmnode_modules 我们使用时,代码可以按下面的写法写

代码语言:javascript复制
import execjs
with open(r'要运行的.js','r',encoding='utf-8') as f:
    js = f.read()
ct = execjs.compile(js,cwd=r'C:Usersw001AppDataRoamingnpmnode_modules')
print(ct.call('Rohr_Opt.reload','1'))

0 人点赞