本文章中所有内容仅供学习交流使用不用于其他任何目的严禁用于商业用途和非法用途否则由此产生的一切后果均与作者无关在 Web 开发和爬虫逆向分析中我们经常需要处理 JavaScript 代码。Python 本身不支持直接执行 JS但通过pyexecjs这个轻量级库我们可以轻松地在 Python 环境中调用 JavaScript 代码。本文将详细介绍如何使用pyexecjs与 Node.js 配合实现 Python 调用 JS 代码的完整流程。1. 环境准备安装 Node.jspyexecjs依赖于一个能运行 JS 的环境我们选择 Node.js 作为执行引擎。1.1 安装 Node.js# Ubuntu/Debian curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash nvm install --lts nvm use --lts # Mac (使用 Homebrew) brew install node1.2 验证 Node.js 安装node -v # 应输出类似 v18.18.2 npm -v # 应输出类似 9.8.02. 安装 pyexecjspip install pyexecjs验证安装import execjs print(execjs.get().name) # 输出: Node.js (V8)3. 简单使用示例3.1 直接执行 JS 代码import execjs # 执行 JS 代码并获取结果 js_code 鲁班_王昭君_猴子_亚瑟_蔡文姬.split(_) result execjs.eval(js_code) print(result) # 输出: [鲁班, 王昭君, 猴子, 亚瑟, 蔡文姬]3.2 编译 JS 代码并调用函数# 编译 JS 代码 js function add(a, b) { return a b; } function multiply(a, b) { return a * b; } ctx execjs.compile(js) # 调用 JS 函数 print(ctx.call(add, 10, 20)) # 输出: 30 print(ctx.call(multiply, 5, 6)) # 输出: 303.3 Windows 编码问题解决方案Windows 系统可能会遇到编码问题解决方法如下import subprocess from functools import partial # 解决 Windows 编码问题 subprocess.Popen partial(subprocess.Popen, encodingutf-8) import execjs print(execjs.get().name) # 确保能正常运行4. 补环境解决常见依赖问题4.1 补全 JS 第三方库环境当 JS 代码依赖第三方库如 crypto、axios时需要先安装这些库# 安装 crypto 库 npm install crypto # 安装 axios 库 npm install axios4.2 补全浏览器环境对于需要浏览器环境的 JS 代码如处理 DOM 或浏览器 API可以使用jsdomnpm install jsdom然后在 Python 中使用import execjs # 创建浏览器环境 ctx execjs.compile( const { JSDOM } require(jsdom); const dom new JSDOM(); const { document } dom.window; ) # 使用浏览器 API ctx.eval(document.createElement(div))5. 找加密入口的几种方法在爬虫逆向分析中找到 JS 加密入口是关键步骤。以下是几种实用方法5.1 浏览器开发者工具1打开浏览器开发者工具F122在 Network 面板中查看请求3找到加密参数的请求查看对应的 JS 文件4在 Sources 面板中搜索关键参数如sign、token5.2 代码搜索法1在 JS 文件中搜索常见加密函数如md5、sha1、aes2搜索参数名如data、params、sign3查看函数调用关系5.3 调试技巧# 在关键函数处添加调试输出 js_code function encrypt(data) { console.log(加密参数:, data); // 加密逻辑 return encryptedData; } ctx execjs.compile(js_code) result ctx.call(encrypt, test)6. 实战案例调试工具让我们通过一个实战案例展示如何使用pyexecjs调试 JS 加密逻辑。6.1 案例模拟登录加密假设我们有一个登录接口需要对密码进行加密JS 代码 (encrypt.js):function encryptPassword(password) { const salt my_salt; const hash CryptoJS.SHA256(password salt).toString(); return hash; }Python 调用:import execjs import os # 设置 Node.js 环境变量 os.environ[NODE_PATH] /usr/local/lib/node_modules/ # 编译 JS 代码 with open(encrypt.js, r) as f: js_code f.read() ctx execjs.compile(js_code) # 调用加密函数 encrypted ctx.call(encryptPassword, 123456) print(f加密后的密码: {encrypted})6.2 调试技巧1逐步调试在 JS 代码中添加console.log输出关键变量2参数验证打印输入参数和输出结果确认加密逻辑3环境一致性确保 Python 和 Node.js 环境中的库版本一致7. 总结pyexecjs是一个非常实用的 Python 库它让我们能够在 Python 中无缝调用 JavaScript 代码。通过结合 Node.js我们可以轻松处理各种复杂的 JS 逻辑包括1数据加密/解密2网络请求模拟3逆向分析4自动化测试关键要点1pyexecjs依赖于 Node.js 环境2安装pyexecjs后使用execjs.get().name验证环境3对于复杂的 JS 代码可以使用execjs.compile()预编译4Windows 用户需要处理编码问题5解决第三方库依赖时使用npm install安装通过本文介绍的方法你可以轻松地在 Python 项目中集成 JavaScript 逻辑解决各种复杂场景下的问题。无论你是爬虫开发者、安全研究人员还是全栈开发者pyexecjs都将成为你工具箱中的利器。小贴士在实际项目中建议将 JS 代码保存为独立文件通过open()读取这样更便于维护和调试。转自https://developer.aliyun.com/article/1681986
Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文章中所有内容仅供学习交流使用不用于其他任何目的严禁用于商业用途和非法用途否则由此产生的一切后果均与作者无关在 Web 开发和爬虫逆向分析中我们经常需要处理 JavaScript 代码。Python 本身不支持直接执行 JS但通过pyexecjs这个轻量级库我们可以轻松地在 Python 环境中调用 JavaScript 代码。本文将详细介绍如何使用pyexecjs与 Node.js 配合实现 Python 调用 JS 代码的完整流程。1. 环境准备安装 Node.jspyexecjs依赖于一个能运行 JS 的环境我们选择 Node.js 作为执行引擎。1.1 安装 Node.js# Ubuntu/Debian curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash nvm install --lts nvm use --lts # Mac (使用 Homebrew) brew install node1.2 验证 Node.js 安装node -v # 应输出类似 v18.18.2 npm -v # 应输出类似 9.8.02. 安装 pyexecjspip install pyexecjs验证安装import execjs print(execjs.get().name) # 输出: Node.js (V8)3. 简单使用示例3.1 直接执行 JS 代码import execjs # 执行 JS 代码并获取结果 js_code 鲁班_王昭君_猴子_亚瑟_蔡文姬.split(_) result execjs.eval(js_code) print(result) # 输出: [鲁班, 王昭君, 猴子, 亚瑟, 蔡文姬]3.2 编译 JS 代码并调用函数# 编译 JS 代码 js function add(a, b) { return a b; } function multiply(a, b) { return a * b; } ctx execjs.compile(js) # 调用 JS 函数 print(ctx.call(add, 10, 20)) # 输出: 30 print(ctx.call(multiply, 5, 6)) # 输出: 303.3 Windows 编码问题解决方案Windows 系统可能会遇到编码问题解决方法如下import subprocess from functools import partial # 解决 Windows 编码问题 subprocess.Popen partial(subprocess.Popen, encodingutf-8) import execjs print(execjs.get().name) # 确保能正常运行4. 补环境解决常见依赖问题4.1 补全 JS 第三方库环境当 JS 代码依赖第三方库如 crypto、axios时需要先安装这些库# 安装 crypto 库 npm install crypto # 安装 axios 库 npm install axios4.2 补全浏览器环境对于需要浏览器环境的 JS 代码如处理 DOM 或浏览器 API可以使用jsdomnpm install jsdom然后在 Python 中使用import execjs # 创建浏览器环境 ctx execjs.compile( const { JSDOM } require(jsdom); const dom new JSDOM(); const { document } dom.window; ) # 使用浏览器 API ctx.eval(document.createElement(div))5. 找加密入口的几种方法在爬虫逆向分析中找到 JS 加密入口是关键步骤。以下是几种实用方法5.1 浏览器开发者工具1打开浏览器开发者工具F122在 Network 面板中查看请求3找到加密参数的请求查看对应的 JS 文件4在 Sources 面板中搜索关键参数如sign、token5.2 代码搜索法1在 JS 文件中搜索常见加密函数如md5、sha1、aes2搜索参数名如data、params、sign3查看函数调用关系5.3 调试技巧# 在关键函数处添加调试输出 js_code function encrypt(data) { console.log(加密参数:, data); // 加密逻辑 return encryptedData; } ctx execjs.compile(js_code) result ctx.call(encrypt, test)6. 实战案例调试工具让我们通过一个实战案例展示如何使用pyexecjs调试 JS 加密逻辑。6.1 案例模拟登录加密假设我们有一个登录接口需要对密码进行加密JS 代码 (encrypt.js):function encryptPassword(password) { const salt my_salt; const hash CryptoJS.SHA256(password salt).toString(); return hash; }Python 调用:import execjs import os # 设置 Node.js 环境变量 os.environ[NODE_PATH] /usr/local/lib/node_modules/ # 编译 JS 代码 with open(encrypt.js, r) as f: js_code f.read() ctx execjs.compile(js_code) # 调用加密函数 encrypted ctx.call(encryptPassword, 123456) print(f加密后的密码: {encrypted})6.2 调试技巧1逐步调试在 JS 代码中添加console.log输出关键变量2参数验证打印输入参数和输出结果确认加密逻辑3环境一致性确保 Python 和 Node.js 环境中的库版本一致7. 总结pyexecjs是一个非常实用的 Python 库它让我们能够在 Python 中无缝调用 JavaScript 代码。通过结合 Node.js我们可以轻松处理各种复杂的 JS 逻辑包括1数据加密/解密2网络请求模拟3逆向分析4自动化测试关键要点1pyexecjs依赖于 Node.js 环境2安装pyexecjs后使用execjs.get().name验证环境3对于复杂的 JS 代码可以使用execjs.compile()预编译4Windows 用户需要处理编码问题5解决第三方库依赖时使用npm install安装通过本文介绍的方法你可以轻松地在 Python 项目中集成 JavaScript 逻辑解决各种复杂场景下的问题。无论你是爬虫开发者、安全研究人员还是全栈开发者pyexecjs都将成为你工具箱中的利器。小贴士在实际项目中建议将 JS 代码保存为独立文件通过open()读取这样更便于维护和调试。转自https://developer.aliyun.com/article/1681986