python-执行js代码常见包(特点与内置引擎)和pyinstaller打包node依赖

python-执行js代码常见包(特点与内置引擎)和pyinstaller打包node依赖

目录

1.ExecJS

一.安装

二.特点

三.实例

2.subprocess + node.exe

一.安装

二.特性

三.实例

3.js2py

一.安装

二.特点

三.实例

4.PyMiniRacer

一.安装

二.特点

三.实例

5.quickjs

一.安装

二.特点

三.实例

6.dukpy

一.安装

二.特点

三.实例

7.pyinstaller打包node环境

六、免责声明


python读取并执行js代码的包有很多,但每个包的特点和内置引擎都不一样,各自特点和适用环境也大不相同。了解各个某块的特点可以极大减少报错几率和代码运行效率,减少内存占用等。

常见的包有:ExecJS,js2py,PyMinRacer,quickjs,dukpy和subprocess+node

其次就是适用selenium来执行js代码,该方式支持所有浏览器原生 JS,完全兼容 JS + DOM,但是启动慢、需要浏览器驱动、打包复杂。我就不介绍了。

感兴趣的可以看完之前写的博客。

python-使用selenium在浏览器中执行js代码以实现逆向某些参数_selenium逆向-ZEEKLOG博客https://blog.ZEEKLOG.net/2401_87946050/article/details/152667533?spm=1001.2014.3001.5502让我一个一个介绍一下:

1.ExecJS

一.安装

pip install PyExecJS 

这是最经典包了,相信很多小伙伴的第一次都是它。

二.特点

  • 需要本地node.js环境 能自动检测环境并调用
  • 是python对多种JS引擎的封装(Node,JScript,PhantomJS......)
  • 兼容性高,大部分的JS代码都没问题
  • 操作简单
  • 不能单独打包运行(除非有node环境)

三.实例

import execjs js_code = execjs.compile(open('js.js','r',encoding='utf-8').read()) result = js_code.call('函数名',参数)

result就是函数返回值

2.subprocess + node.exe

一.安装

不需要额外安包。

这是第二好用的包了。

二.特性

subprocess适用最原始的兼容方式。用python直接启动node进程执行JS代码。

  • 需要完整的node环境
  • 能执行任何JS,兼容性几乎百分百(支持require,fs,crypto......)
  • 但是启动慢,用起来会复杂一些

三.实例

python代码

import subprocess param = "hello" result = subprocess.run(["node", "main.js", param], capture_output=True, text=True) print(result.stdout.strip()) 

main.js

function a_b(x) { return x + "_from_node"; } if (require.main === module) { console.log(a_b(process.argv[2])); } 

3.js2py

一.安装

pip install js2py 

二.特点

  • js2py是纯python实现的JS解释器,脱离于node环境
  • 不需要node环境和任何外部解释器
  • 但性能一般,只能执行简单JS代码(就比如什么require()导包就会报错)
  • 不支持ES6+特性

三.实例

import js2py js = "function add(a, b){return a + b;}" context = js2py.EvalJs() context.execute(js) print(context.add(5, 7)) # 输出: 12 

4.PyMiniRacer

一.安装

pip install py_mini_racer 

二.特点

  • 基于Google V8引擎,不需要node环境就能运行
  • 性能强悍
  • 适合pyinstaller打包
  • 兼容现代JS语法(ES6+)
  • 适用于加密算法,签名计算,JS执行等,但不支持node模块体系(require())

三.实例

from py_mini_racer import py_mini_racer ctx = py_mini_racer.MiniRacer() ctx.eval("function a_b(x){return x.toUpperCase();}") print(ctx.call("a_b", "hello")) # 输出: HELLO 

5.quickjs

这个包就不怎么常见的,我基本上不怎么用

一.安装

pip install quickjs 

二.特点

  • 也是纯python内嵌的,无需node环境
  • 性能好,内存小
  • 轻量、现代语法支持
  • 适用独立的QuickJS引擎(QuickJS 是一个体积小巧、可嵌入的 Javascript 引擎。它支持 ES2023规范,包括模块、异步生成器、代理和 BigInt。)
  • 但不支持node的require(),不支持DOM......

三.实例

import quickjs ctx = quickjs.Context() ctx.eval("function a_b(x){return x + ' world';}") print(ctx.call("a_b", "hello")) # 输出: hello world 

6.dukpy

一.安装

pip install dukpy 

二.特点

  • 不依赖node环境
  • 运行快,内存小
  • 小巧、安全嵌入式
  • 不支持复杂JS特性(如import,export)

三.实例

import dukpy result = dukpy.evaljs(""" function test(x){return x + 100;} test(23); """) print(result) # 输出: 123 

7.pyinstaller打包node环境

当我们要打包python程序时,而里面又用到了js代码,而我们正好用的execjs加载的js代码

我们用pyinstaller打包,如下。

pyinstaller -F main.py --add-data "main.js;."

这样得到的exe执行文件,若给到没用node环境的人执行就会报语法错误,就是因为他没有环境.

若是简单的js加密还行,我们直接用PyMiniRacer或其它不需要node环境的包,代替打包就行。

但如果我们的js代码很复杂,用到了require()包,或者是js逆向补环境来的等等等。

这时候打包最后就连带着node环境一起打包.这样即使是没任何环境的人也能执行打包后的exe文件。

我们将node.exe放到相同目录node文件下,然后打包

pyinstaller -F main.py --add-data "main1.js;." --add-data "main2.js;." --add-data "node/;node"

如果用到了更多js文件,照着这格式写就行。

以上便是这期全部内容,感谢观看。

六、免责声明

本文仅用于网络通信与数据序列化协议的学习、研究与交流
文中示例均为自建或公开协议示例,不涉及任何实际平台的接口调用或逆向分析。
禁止读者将本文所述技术用于未授权的数据抓取、破解或商业用途。
作者不对任何滥用行为承担法律责任。

Read more

Java WebP图像优化实战:从技术选型到业务价值实现

Java WebP图像优化实战:从技术选型到业务价值实现 【免费下载链接】webp-imageioJava ImageIO WebP support 项目地址: https://gitcode.com/gh_mirrors/we/webp-imageio 问题场景:现代应用中的图像性能瓶颈 在当今数字化时代,企业应用普遍面临图像处理的三大核心挑战:页面加载速度缓慢、存储成本不断攀升、用户流量消耗过大。传统JPEG和PNG格式在保证图像质量的同时,往往带来过大的文件体积,直接影响用户体验和运营成本。 以电商平台为例,商品详情页通常包含数十张高清图片,平均每张图片体积超过500KB。当用户浏览多个商品时,仅图片加载就可能消耗数百MB流量,严重影响转化率。 解决方案:webp-imageio技术架构解析 核心技术优势 webp-imageio通过原生集成Java ImageIO框架,为企业级应用提供完整的WebP图像编解码能力。其技术架构具备以下关键特性: * 零侵入集成:作为标准ImageIO扩展,无需修改现有代码即可接入 * 跨平台支持:完整覆盖Windows、L

By Ne0inhk
Elasticsearch核心概念与Java客户端实战 构建高性能搜索服务

Elasticsearch核心概念与Java客户端实战 构建高性能搜索服务

目录 🎯 先说说我被ES"虐惨"的经历 ✨ 摘要 1. 为什么选择Elasticsearch? 1.1 从数据库的痛苦说起 1.2 Elasticsearch的优势 2. ES核心架构解析 2.1 集群架构 2.2 索引与分片 3. Java客户端实战 3.1 客户端选型对比 3.2 RestHighLevelClient配置 3.3 Spring Data Elasticsearch配置 4. 索引设计最佳实践 4.1 索引生命周期管理 4.2 映射设计技巧 5. 查询优化实战 5.1 查询类型对比 5.

By Ne0inhk
Java WebFlux技术在百度地图深度检索集成中的实践应用

Java WebFlux技术在百度地图深度检索集成中的实践应用

目录 前言 一、WebFlux技术简介 1、WebFlux是什么 2、WebFlux有哪些组件 3、WebFlux的使用场景 二、WebFlux集成百度深度检索 1、Maven资源引入 2、业务层实现 3、控制层实现 4、程序启动 三、成果输出及对比 1、百度深度检索输出 2、DeepSeek检索输出 3、Kimi检索输出 四、总结 前言         随着地理信息技术的飞速发展以及移动互联网的普及,地图服务已成为人们日常生活中不可或缺的一部分。从出行导航到位置查询,从周边设施搜索到地理信息分析,地图服务的应用场景日益丰富。百度地图凭借其庞大的地理数据资源、精准的定位技术和强大的检索功能,为用户提供了全方位的地理信息服务。然而,对于众多企业和开发者而言,如何将百度地图的深度检索能力与自身业务系统或应用进行高效集成,以满足用户对地理信息检索的个性化需求,是一个极具挑战性且意义重大的课题。在之前的博文中,我们对百度地图的深度检索服务进行了详细的介绍,对如何使用DeepSeek和地图的结合进行了很好的实践,智绘未来:当 DeepSeek

By Ne0inhk
基于Java+SSM+Django实验室排课系统(源码+LW+调试文档+讲解等)/实验室排课软件/实验室课程安排/实验室预约系统/实验室教学管理/实验室排课解决方案/实验室课程管理系统

基于Java+SSM+Django实验室排课系统(源码+LW+调试文档+讲解等)/实验室排课软件/实验室课程安排/实验室预约系统/实验室教学管理/实验室排课解决方案/实验室课程管理系统

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题大全✅ 2025-2026年最新500个热门微信小程序毕业设计选题大全✅ Java毕业设计最新1000套项目精品实战案例 微信小程序毕业设计最新500套项目精品案例 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 本文项目技术选型介绍 前端:Django、Python Web框架,后端语言Python 后端:Spring+SpringMVC+Mybatis 数据库:MySQL、SQLServer 开发工具:IDEA、Eclipse、Navicat等 ✌关于毕设项目技术实现问题讲解也可以给我留言咨询!!! 详细视频演示 请联系博主获取更详细的演示视频-源码编号2607 具体实现截图 框架介绍 前端技术介绍 Django 的模板系统在程序设计中提供了灵活的页面渲

By Ne0inhk