Python中使用execjs库遇到的疑难问题汇总与解析
文章目录
execjs使用方式:
方式一:直接读取后,调用方法
obj = execjs.compile(open("./03loader.js",encoding='utf-8').read())
value = obj.call("方法名",参数一,参数二)
方式二:读取js文件后,替换一些资源,然后在使用execjs.compile() 如下:
with open('shenv.js','r',encoding='utf-8') as js_file:
js_code = js_file.read()
print("js_code:::",js_code)
js_code = js_code.replace('mymetaContent',content_str).replace("'auto_js'",auto_js).replace("'ts_js'",ts_js)
print("js_code2222:::",js_code)
js_compile = execjs.compile(js_code)
print("js_compile:::",js_compile)
cookie_t = js_compile.call('get_cookie') #.split(';')[0].split('=')
使用execjs库遇到的一些问题
问题①:execjs使用时编码错误:
使用execjs.compile() 方式 会报编码问题,错误提示如下:
UnicodeEncodeError: 'gbk' codec can't encode character '\u0228' in position 6624: illegal multibyte sequence
解决方案:
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="UTF-8")
import execjs
问题②:报如下错误,
execjs._exceptions.ProgramError: TypeError: Cannot read properties of undefined (reading 'length')
排除方式:引用的js文件种,是否有 未定义变量,是否有使用的库没有引入,例如使用 console.log(),这个库在js文件执行的时候不会用问题,但是通过python 的execjs 库使用 该JS 文件的时候,就会出现如上方式。
解决方式一:直接注释掉
解决方式二:引入console 库
const { log } = require("console");
看来必须一直更新使用execjs 库时遇到的一些奇奇怪怪的问题,此篇文章一直持续更新中......
作者:飞猪~