python使用execjs執行含有document、window等對象的js代碼報錯對象undefined

使用jsdom解決

第一步 使用以下命令安裝:

npm i jsdom -g

第二步 只需在對應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;

在全局安裝jsdom後,在node裏按上面的寫法是沒有問題的,但是我們要在python中使用的話,不能在全局安裝
如果在全局安裝,使用時會報如下錯誤,說找不到jsdom

execjs._exceptions.ProgramError: Error: Cannot find module 'jsdom'

解決辦法有兩種
1.就是在python執行文件所在的運行目錄下,使用npm安裝jsdom

  1. 使用cwd參數,指定模塊的所在目錄,比如,我們在全局安裝的jsdom,在cmd裏通過npm root -g 可以查看全局模塊安裝路徑: C:\Users\w001\AppData\Roaming\npm\node_modules
    我們使用時,代碼可以按下面的寫法寫
import execjs
with open(r'要運行的.js','r',encoding='utf-8') as f:
    js = f.read()
ct = execjs.compile(js,cwd=r'C:\Users\w001\AppData\Roaming\npm\node_modules')
print(ct.call('Rohr_Opt.reload','1'))

參考鏈接:python使用execjs執行含有document、window等對象的js代碼,使用jsdom解決 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章