Python执行JS代码的方法

慢慢来
慢慢来
发布时间:2026-10-14| 6人浏览过
原创

本文介绍如何在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代码的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。