python逆向爬虫时调用execjs报错UnicodeDecodeError: 'gbk'


背景: python逆向爬虫时调用execjs报错UnicodeDecodeError: 'gbk'

报错详细信息

UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 85: illegal multibyte sequence

原因

execjs中使用的Popen打开命令,接受返回信息时编码错误导致报错(一般是返回了中文)。

解决

找到 python目录\Lib\site-packages\execjs_external_runtime.py文件。然后在文件中查找到函数调用: Popen(cmd 在这个函数添加参数 encoding='utf-8',在python3.6,python3.9都能解决问题

#修改前
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=self._cwd, universal_newlines=True)
#修改后
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=self._cwd, universal_newlines=True,encoding='utf-8')

#修改前
p = Popen(cmd, stdout=PIPE, stderr=PIPE, cwd=self._cwd, universal_newlines=True)
#修改后
p = Popen(cmd, stdout=PIPE, stderr=PIPE, cwd=self._cwd, universal_newlines=True,encoding='utf-8')