python读取js文件报错
部分js内容
function abcd2(_0x5d3f51, _0x2da958) {
if (!abcdx()) return;
var _0x17fe67 = 2147483648;
var _0x330f76 = 2147483647;
var _0x8c2ab2 = ~~(_0x5d3f51 / _0x17fe67);
var _0x33045d = ~~(_0x2da958 / _0x17fe67);
var _0xa5b0b1 = _0x5d3f51 & _0x330f76;
var _0x352369 = _0x2da958 & _0x330f76;
var _0x3f97b8 = _0x8c2ab2 ^ _0x33045d;
var _0x4307f8 = _0xa5b0b1 ^ _0x352369;
return _0x3f97b8 * _0x17fe67 + _0x4307f8;
}
报错信息为
jqsign = execjs.compile(open(r"1.js").read().encode('gb18030').decode("gb18030")).call('aa',rndnum,starttime,activityId)
UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 3058: illegal multibyte sequence 你正在尝试使用Python读取一个包含JavaScript代码的文件,并使用`execjs`库执行JavaScript代码。根据你提供的错误信息,问题出现在编码与解码部分。
报错信息显示:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 3058: illegal multibyte sequence
这是因为你尝试使用`gb18030`或`gbk`编码解码文件,但文件中存在不符合该编码规则的字节。我建议尝试使用`utf-8`编码打开文件,因为它通常是JavaScript文件的默认编码。你可以通过以下方式修改你的代码:
jqsign = execjs.compile(open(r"1.js", encoding='utf-8').read()).call('aa', rndnum, starttime, activityId)
这里,我使用了`encoding='utf-8'`参数来指定文件编码。如果这样仍然出现问题,请检查你的JavaScript文件是否包含非法字符或者手动指定正确的编码。 isdkz 发表于 2023-4-14 00:25
你正在尝试使用Python读取一个包含JavaScript代码的文件,并使用`execjs`库执行JavaScript代码。根据你提供 ...
解决了,但是现在又报这个错误
execjs._exceptions.ProgramError: ReferenceError: document is not defined
但是我js调试过是正确的,这是为什么呢{:10_285:}
python代码为
import execjs
rndnum = "607374188.44535993"
starttime = "2022/4/21 14:25:20"
activityId = "129722188"
jqsign = execjs.compile(open(r"1.js", encoding='utf-8').read()).call('_0x156205',rndnum,starttime,activityId)
print(jqsign)
js代码为
global.navigator={
userAgent: 'node.js',
};
function abcd1(_0xd7a12a) {
return abcd2(_0xd7a12a, 3597397);
}
function abcd2(_0x5d3f51, _0x2da958) {
if (!abcdx()) return;
var _0x17fe67 = 2147483648;
var _0x330f76 = 2147483647;
var _0x8c2ab2 = ~~(_0x5d3f51 / _0x17fe67);
var _0x33045d = ~~(_0x2da958 / _0x17fe67);
var _0xa5b0b1 = _0x5d3f51 & _0x330f76;
var _0x352369 = _0x2da958 & _0x330f76;
var _0x3f97b8 = _0x8c2ab2 ^ _0x33045d;
var _0x4307f8 = _0xa5b0b1 ^ _0x352369;
return _0x3f97b8 * _0x17fe67 + _0x4307f8;
}
function abcd3(_0x2a839f, _0x29778) {
if (_0x2a839f - 62 < 0) {
var _0x47bf41 = _0x29778["substr"](_0x2a839f, 1);
return _0x47bf41;
}
var _0x5aa264 = _0x2a839f % 62;
var _0xf91ae6 = parseInt(_0x2a839f / 62);
return abcd3(_0xf91ae6, _0x29778) + _0x29778["substr"](_0x5aa264, 1);
}
function abcd4(_0x2d1e33, _0x4ccbfe) {
if (!abcdx()) return;
var _0x39c799 = _0x4ccbfe["split"]("");
var _0x368c45 = _0x4ccbfe["length"];
for (var _0x2faa11 = 0; _0x2faa11 < _0x2d1e33["length"]; _0x2faa11++) {
var _0x1e44d9 = parseInt(_0x2d1e33);
var _0x172ebc = _0x39c799;
var _0x939174 = _0x39c799;
_0x39c799 = _0x939174;
_0x39c799 = _0x172ebc;
}
_0x4ccbfe = _0x39c799["join"]("");
return _0x4ccbfe;
}
function abcd5(_0x30fc22) {
if (!abcdx()) return;
var _0x416034 = 0;
var _0x39f6f7 = _0x30fc22["split"]("");
for (var _0x3a1139 = 0; _0x3a1139 < _0x39f6f7["length"]; _0x3a1139++) {
_0x416034 += _0x39f6f7["charCodeAt"]();
}
var _0x33f508 = _0x30fc22["length"];
var _0x51436b = _0x416034 % _0x33f508;
var _0xd1d5ab = [];
for (var _0x3a1139 = _0x51436b; _0x3a1139 < _0x33f508; _0x3a1139++) {
_0xd1d5ab["push"](_0x39f6f7);
}
for (var _0x3a1139 = 0; _0x3a1139 < _0x51436b; _0x3a1139++) {
_0xd1d5ab["push"](_0x39f6f7);
}
return _0xd1d5ab["join"]("");
}
function abcdu(_0x32b9a8) {
var _0x4ba9ab = -480;
var _0x1ce339 = new Date()["getTimezoneOffset"]();
var _0x2ab335 = _0x4ba9ab - _0x1ce339;
return _0x32b9a8["getTime"]() / 1000 + _0x2ab335 * 60;
}
function abcdx() {
if (navigator["webdriver"]) return ![];
if (document["$cdc_asdjflasutopfhvcZLmcfl_"]) return ![];
if (/PhantomJS/ ["test"](window["navigator"]["userAgent"])) return ![];
if (window["callPhantom"] || window["_phantom"]) return ![];
return !![];
}
function _0x156205(rndnum, starttime, activityId) {
var _0x4b9009 = rndnum["split"]("."); //分隔rn 获取前置 给予_0x4b9009
var _0x37348b = abcd1(parseInt(_0x4b9009)); //abcd1处理_0x4b9009 给予_0x37348b
var _0x307a46 = (_0x37348b + "")["split"](""); //_0x37348b 给予_0x307a46
var _0x2f4e03 = starttime; //获取starttime 给予_0x2f4e03
var _0x17071c = abcdu(new Date(_0x2f4e03["replace"](new RegExp("-", "gm"), "/"))); //转换时间戳通过abcdu处理 给予_0x17071c
var _0x12e25a = _0x17071c + "";
if (_0x17071c % 10 > 0) _0x12e25a = _0x12e25a["split"]("")["reverse"]()["join"](""); //_0x17071c%10>0 处理
var _0x24bc24 = parseInt(_0x12e25a + "89123"); //时间戳 1650522320+89123 结果:165052232089123
var _0x307a46 = (_0x24bc24 + "" + (_0x37348b + ""))["split"](""); //分隔上面
var _0xd36323 = abcd4(_0x307a46, "kgESOLJUbB2fCteoQdYmXvF8j9IZs3K0i6w75VcDnG14WAyaxNqPuRlpTHMrhz"); //abcd4处理_0x307a46
var _0xc23193 = _0x24bc24 + _0x37348b + parseInt(activityId); //值得一提activityId打开页面的时候就处理了
jqParam = abcd3(_0xc23193, _0xd36323);
var _0x16feb7 = abcd5(jqParam);
jqParam = _0x16feb7;
return jqParam;
}
var rndnum = "607374188.44535993";
var starttime = "2022/4/21 14:25:20";
var activityId = "129722188";
_0x156205(rndnum, starttime, activityId)
gfz 发表于 2023-4-14 09:18
解决了,但是现在又报这个错误
execjs._exceptions.ProgramError: ReferenceError: document is not def ...
因为 Python 中没有 js 中对应的对象抛出的异常
需要使用 jsdom 模块,创建个浏览器虚拟环境进行读取并执行
Twilight6 发表于 2023-4-14 10:17
因为 Python 中没有 js 中对应的对象抛出的异常
需要使用 jsdom 模块,创建个浏览器虚拟环境进行读 ...
解决了,感谢 gfz 发表于 2023-4-14 09:18
解决了,但是现在又报这个错误
execjs._exceptions.ProgramError: ReferenceError: document is not def ...
问题出现在你的JavaScript代码中的document对象。execjs库运行JavaScript代码时,它不提供浏览器环境中的所有对象,如document和window。
在你的JavaScript代码中,abcdx()函数试图访问document对象,但在execjs执行环境中,document对象并不存在,因此报错。
为了解决这个问题,你可以尝试在abcdx()函数中检查document对象是否存在,然后相应地修改函数逻辑。例如,你可以将abcdx()函数修改为:
function abcdx() {
if (typeof document !== "undefined") {
if (navigator["webdriver"]) return ![];
if (document["$cdc_asdjflasutopfhvcZLmcfl_"]) return ![];
}
if (/PhantomJS/ ["test"](window["navigator"]["userAgent"])) return ![];
if (window["callPhantom"] || window["_phantom"]) return ![];
return !![];
}
这里,我在访问document对象之前添加了typeof document !== "undefined"检查。如果document对象不存在,代码将不会尝试访问navigator["webdriver"]和document["$cdc_asdjflasutopfhvcZLmcfl_"]。
然后,你可以使用修改后的JavaScript代码继续执行Python代码。注意,execjs库不支持ES6模块导入,因此你需要将导入语句(如import)删除或注释掉。
import execjs
rndnum = "607374188.44535993"
starttime = "2022/4/21 14:25:20"
activityId = "129722188"
jqsign = execjs.compile(open(r"1.js", encoding='utf-8').read()).call('_0x156205',rndnum,starttime,activityId)
print(jqsign)
页:
[1]