Python执行JS代码的方法
本文介绍如何在Python中执行JavaScript代码,重点解决爬虫场景中JS混淆导致逻辑难以解析的问题。通过安装node环境和PyExecJS库,演示了正常及混淆JS代码的执行过程,并探讨了window对象处理及Selenium替代方案。
什么是js代码混淆?
正常代码
首先观察一段JavaScript代码,其逻辑非常直观,主要功能是拼接当前时间并返回结果。
function formatDate(now) {
var now = new Date(1230999938);
var year=now.getFullYear();
var month=now.getMonth()+1;
var date=now.getDate();
var hour=now.getHours();
var minute=now.getMinutes();
var second=now.getSeconds();
return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
}
运行上述代码,效果如图所示。

混淆代码
这里选取了一个在线的JS代码混淆工具进行处理。
生成的JavaScript代码如下所示。
function formatDate(mz1){var KkkGDiH2=new window["\x44\x61\x74\x65"](1230999938);var tsk3=KkkGDiH2['\x67\x65\x74\x46\x75\x6c\x6c\x59\x65\x61\x72']();var YMreyP4=KkkGDiH2['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1;var Ozo5=KkkGDiH2['\x67\x65\x74\x44\x61\x74\x65']();var QMYEc$eD6=KkkGDiH2['\x67\x65\x74\x48\x6f\x75\x72\x73']();var JfXVV_Akq7=KkkGDiH2['\x67\x65\x74\x4d\x69\x6e\x75\x74\x65\x73']();var $mP8=KkkGDiH2['\x67\x65\x74\x53\x65\x63\x6f\x6e\x64\x73']();return tsk3+"\x2d"+YMreyP4+"\x2d"+Ozo5+" "+QMYEc$eD6+"\x3a"+JfXVV_Akq7+"\x3a"+$mP8
这并非虚构,混淆后的代码确实呈现这种形态,具体可参考相关图片。

读者可能会疑惑,代码变得如此杂乱是否还能正常运行?答案是肯定的。尽管代码外观混乱,但其执行结果与原始代码完全一致。
这就带来了一个实际问题:在进行爬虫开发时,通常需要分析JS代码逻辑并进行逆向解密。如果代码经过严重混淆,解析难度将大幅增加。
由于逻辑完全不可读,基本上无法通过Python直接按照JS逻辑重写实现……
笔者也曾在此处受阻,随后想到:如果Python能够直接执行JS代码,便无需关心函数内部的具体逻辑,只需获取函数返回值即可。
Python第三方包Execjs
鉴于此类需求普遍存在,开发者们推出了专门用于在Python中执行JS代码的工具包。
安装
在安装该库之前,系统需具备Node.js环境。此处省略安装步骤,按常规流程操作即可。
pip3 install PyExecJS
执行js
注意:由于前文提到的JS代码会生成window对象,直接执行可能会失败,需要额外的辅助配置。此处仅列举其他简单示例。
正常js代码
function add(x, y) {
return x + y;
}
Python执行JS代码的实现方式如下。
import execjs
ctx = execjs.compile("""
function add(x, y) {
return x + y;
}
""")
print(ctx.call("add", 1, 2))
执行结果如下图所示:

混淆js代码
function add(bi1,Pl$2){return bi1+Pl$2}
Python执行混淆JS代码的代码示例。
import execjs
ctx = execjs.compile("""
function add(bi1,Pl$2){return bi1+Pl$2}
""")
print(ctx.call("add", 1, 2))
执行结果如下图所示:

由此可见,无论代码是否经过混淆,只要符合JS规范,Python均能正常执行。
前文提到的拼接时间返回的JS混淆代码同样可以执行,但因其包含window对象,需要安装node的jsdom模块。由于网络配置问题无法下载演示,敬请谅解。
另一种方案是使用Selenium打开浏览器执行JS代码并返回结果,当然,这种方式的速度相对较慢。
以上就是Python执行JS代码方法的详细内容,更多关于Python执行JS代码的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













