Python js2py怎么用_爬虫中执行JS代码还原前端混淆加密算法的基础应用

千杰君_3451

千杰君_3451

2026-03-21

278人浏览

原创

js2py不能替代puppeteer或pyexecjs,因其不支持dom、fetch等浏览器api且es6+兼容性差,仅适用于无dom的轻量同步js执行,如字符串处理或简单加密。

python js2py怎么用_爬虫中执行js代码还原前端混淆加密算法的基础应用

js2py 不能直接替代 Puppeteer 或 PyExecJS

js2py 是纯 Python 实现的 JS 解释器,适合轻量、同步、无 DOM 的 JS 执行场景。它不支持 window、document、fetch、setTimeout 等浏览器 API,也不兼容大部分现代 ES6+ 语法(如可选链 ?.、空值合并 ??、顶层 await)。爬虫中遇到带 DOM 操作或网络请求的混淆逻辑,用 js2py 会直接报错或结果错乱。

常见错误现象:ReferenceError: window is not defined、SyntaxError: Unexpected token 'const'、TypeError: Cannot read property 'xxx' of undefined。

  • 适用场景:字符串拼接、Base64/Hex 编解码、简单异或/位运算、固定数组查表、AES/DES 密钥硬编码还原
  • 不适用场景:动态生成 document.cookie、调用 crypto.subtle.digest、解析依赖 webpack 运行时的混淆函数
  • 性能影响:比 V8 引擎慢 10–50 倍,但启动零开销;适合单次执行、低频调用(如每次请求前生成 sign)

初始化 js2py 并执行简单混淆函数

核心是用 js2py.eval_js 或 js2py.compile_script 加载 JS 字符串,再传参调用。注意变量作用域隔离和类型转换——Python 字典传入后是 JS 对象,但 None 变成 null,True/False 变成 true/false,整数和浮点数精度可能丢失。

示例:某登录接口 sign 是 md5(timestamp + key).substr(0,16) 的 JS 实现:

python-parallelization
python-parallelization

将顺序 Python 代码转换为并行/并发实现,用于在需要并行化 Python 代码、提升性能时使用。

下载
import js2py
js_code = """
function genSign(ts, key) {
    var str = ts + key;
    return md5(str).substr(0, 16);
}
"""
# 需提前注入 md5 函数(js2py 自带,但需显式启用)
ctx = js2py.EvalJs()
ctx.execute(js_code)
result = ctx.genSign('1715678901', 'abc123')  # 返回字符串
  • 必须用 EvalJs() 实例承载上下文,否则函数无法访问全局变量(如 md5)
  • 若 JS 里用了 var 声明但未赋值,js2py 默认设为 undefined,不是 None,后续调用可能静默失败
  • 中文字符串传入需确保源码文件编码为 UTF-8,且 JS 字符串字面量本身不含 BOM,否则 eval_js 会解析失败

处理含闭包或立即执行函数(IIFE)的混淆代码

很多前端加密逻辑封装在 IIFE 里,返回一个对象或函数。js2py 能解析,但要注意:IIFE 执行后的返回值默认丢弃,必须显式捕获;闭包内变量无法从外部读取,只能通过暴露的接口调用。

示例:一段返回加密函数的 IIFE:

js_code = """
(function() {
    var s = 'salt_2024';
    return {
        encrypt: function(x) { return btoa(x + s); }
    };
})()
"""
ctx = js2py.EvalJs()
ret = ctx.eval(js_code)  # ret 是 JS 对象,不是 Python dict
encrypted = ret.encrypt('hello')  # 正确调用
  • 不能写 ctx.execute(js_code); ctx.encrypt(...) —— IIFE 的返回值没绑定到 ctx 上
  • ret.encrypt 是 JS 函数,不能直接用 Python 的 str 参数传入,要确保类型匹配(比如数字传进去会被转成字符串)
  • 如果 IIFE 内部有 console.log,js2py 默认忽略;需手动 patch console 对象才能捕获调试输出

绕过常见兼容性坑:ES5 降级与全局变量污染

js2py 对 ES5 支持较好,但对 let/const、for...of、箭头函数 兼容不稳定。最稳妥做法是把目标 JS 用 esbuild --target=es5 或在线工具预先降级;同时避免污染全局作用域——多次 execute 同一段 JS 会导致变量重复声明报错。

  • 推荐做法:每次执行前新建 EvalJs() 实例,或用 ctx.reset() 清空上下文
  • 避免使用 with 语句、eval 字符串拼接,js2py 解析它们极不可靠
  • 路径相关:如果 JS 里写了 require('./utils'),js2py 完全不支持 CommonJS 加载,必须手动提取并 execute 依赖代码
  • 加密算法若依赖 crypto-js 等库,别试图直接加载完整 CDN 版本——删掉所有 if (typeof module !== 'undefined') 和 root.CryptoJS 绑定逻辑,只保留核心函数体

复杂点在于:混淆 JS 往往混合了运行时检测(如 document.body 是否存在)、环境判断(process.env)、甚至反调试逻辑。这些在 js2py 里不是“执行不了”,而是“执行了但分支走错”,最终 sign 对不上。这时候得人工拆解控制流,而不是指望解释器自动适配。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python 爬虫

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2463

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5343

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6370

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5978

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

843

5

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1731

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4444

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1709

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

26097

23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习