execjs使用時異常


一.異常信息(...gbk.....)

UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa1 in position 26: illegal multibyte sequence

解決辦法

進入報錯源碼

\lib\subprocess.py

因為是codec相關報錯

就搜索encoding,為什么搜這個就是代碼寫多了感覺

我們會發現這樣一段

 def __init__(self, args, bufsize=-1, executable=None,
                 stdin=None, stdout=None, stderr=None,
                 preexec_fn=None, close_fds=True,
                 shell=False, cwd=None, env=None, universal_newlines=None,
                 startupinfo=None, creationflags=0,
                 restore_signals=True, start_new_session=False,
                 pass_fds=(), *, encoding=None, errors=None, text=None):
 #encoding是空怪不得是gbk報錯
#直接修改encoding=utf8

解決啦~~

二.異常信息(沒有window對象)

execjs._exceptions.ProgramError: TypeError: __g._encrypt is not a function

解決辦法

我們execjs除了nodejs我們還需要瀏覽器環境,我們瀏覽器上還需要document以及window對象所有呢我們要安裝環境

執行npm install jsdom

代碼.py中我們要修改內容
#js_obj = execjs.compile(js_codex)修改成
js_obj = execjs.compile(js_code,cwd='node_modules'),
#也就是導入我們下載完成后的node_modules的文件

然后呢我們在Js_encryption.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;
//固定寫法別想那么多


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM