python执行js代码,学会这几个方法就够了

python执行js代码,学会这几个方法就够了一 前言 Python 和 JavaScript 是两种广泛应用于 Web 开发的重要编程语言 在日常的 Web 开发和 Web 数据处理中 我们经常需要使用这两种语言

大家好,欢迎来到IT知识分享网。

一、前言

PythonJavaScript 是两种广泛应用于 Web 开发的重要编程语言,在日常的 Web 开发和 Web 数据处理中,我们经常需要使用这两种语言。

例如,在 Web 端爬虫过程中,我们可能会遇到需要解密网页源代码的情况,这时就需要一层一层剥离关键的 JS 代码,并使用 Python 执行这段代码以获取关键信息。

那么,Python 如何调用 JS 呢?有哪些方式呢?

二、楔子

以一段简单的JS脚本(add.js)为例,计算两个数的和。

// JavaScript 示例代码 function add(a, b) { return a + b; }

三、常见的 Python 调用 JavaScript 的方式

a. 使用 nodejs 命令

使用 Python 的os.popensubprocess执行 node 命令,执行 JS 脚本。

首先,确保本地已经安装了 Node.js 环境:

> node -v v18.16.1

修改 JS 脚本,新增一个导出函数 init ,方便内部函数被调用:

// JavaScript 示例代码 function add(a, b) { return a + b; } // 新增一个导出函数(node方式) module.exports.init = function (arg1, arg2) { // 调用函数,并返回 console.log(add(arg1, arg2)); }; // 调用 init 方法并传递参数 module.exports.init(parseInt(process.argv[3]), parseInt(process.argv[4]));

使用subprocess模拟node.js命令行调用并获取结果:

import subprocess from loguru import logger if __name__ == '__main__': # 使用 subprocess 模块执行 Node.js 命令 result = subprocess.run(["node", "add.js", "init", "3", "5"], capture_output=True, text=True) # 输出执行结果 logger.info(f"Node.js 执行结果: {result.stdout.strip()}")

b. PyExecJS方法

PyExecJS 是使用最多的一种方式,底层实现方式是本地 JS 环境下运行 JS 代码,支持的 JS 环境包含:Node.js、PhantomJS 等。

首先第一步安装:

pip install PyExecJS==1.5.1

安装完成之后,即可以使用其调用 JS 脚本:

#! -*-conding=: UTF-8 -*- from loguru import logger import execjs # 定义 JavaScript 代码 # js_code = """ # function add(a, b) { # return a + b; # } # """ if __name__ == '__main__': # Python 示例代码 js_code = open("add.js", "r", encoding="utf-8").read() # 使用 PyExecJS 执行 JavaScript 代码 ctx = execjs.compile(js_code) # 调用 JavaScript 函数,并计算结果 result = ctx.call("add", 3, 5) logger.info(f"调用 JavaScript 函数的结果为: {result}")

c. 通过 Web 浏览器

DrissionPage方式

这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一。

首先安装依赖库:

pip install DrissionPage==4.0.4.22

执行 JS 脚本:

#! -*-conding=: UTF-8 -*- from DrissionPage import ChromiumPage if __name__ == '__main__': page = ChromiumPage() # 打开网页 page.get("about:blank") # 定义 JavaScript 代码 js_code = """ function add(a, b) { return a + b; } """ # 在当前页面上执行 JavaScript 代码,并传递参数 result = page.run_js(js_code + " return add(8, 5)") # 输出执行结果 print("JavaScript 执行结果:", result) # JavaScript 执行结果: 13 page.quit()

playwright方式

Playwright 是一个用于 Web 测试和自动化的框架。

首先安装依赖库:

pip install playwright==1.43.0 playwright install # 安装驱动

执行 JS 脚本:

#! -*-conding=: UTF-8 -*- from playwright.sync_api import sync_playwright if __name__ == '__main__': # 启动 Playwright with sync_playwright() as p: # 启动 Chromium 浏览器 browser = p.chromium.launch(headless=False) # 创建新页面 page = browser.new_page() # 打开网页 page.goto("https://baidu.com") # 定义 JavaScript 代码 js_code = """ function add(a, b) { return a + b; } """ page.add_script_tag(content=js_code) # 使用 page.add_script_tag() 方法将其注入到页面中,然后在页面上执行它 # 在当前页面上执行 JavaScript 代码 result = page.evaluate("add(5, 7)") # 输出执行结果 print("JavaScript 执行结果:", result) # JavaScript 执行结果: 12 # 关闭浏览器 browser.close()

selenium方式

Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括 Chrome、Firefox、Safari 等主流界面浏览器和 phantomJS 无界面浏览器。

首先安装依赖库:

pip install selenium==4.20.0

执行 JS 脚本:

#! -*-conding=: UTF-8 -*- from selenium import webdriver # 启动 Chrome 浏览器 driver = webdriver.Chrome() # 打开网页 driver.get("about:blank") # 定义 JavaScript 代码 js_code = """ function add(a, b) { return a + b; } """ # 在当前页面上执行 JavaScript 代码,并传递参数 result = driver.execute_script(js_code + " return add(3, 5)") # 输出执行结果 print("JavaScript 执行结果:", result) # 关闭浏览器 driver.quit()

类似的自动化工具还有很多,如果只是单纯的调用 JS 脚本,属实有点杀鸡用牛刀的赶jio。

d. Js2Py方式

Js2Py 作为一个纯 Python 实现的 JS 解释器,可以完全脱离 JS 环境,直接将 JS 代码转换为 Python 代码。

首先第一步安装:

pip install Js2Py==0.74

调用 JS 脚本:

#! -*-conding=: UTF-8 -*- from js2py import eval_js if __name__ == '__main__': # JavaScript 示例代码 js_code = """ function add(a, b) { return a + b; } """ # 执行 JavaScript 代码 result = eval_js(js_code + "add(3, 5)") # 输出执行结果 print("JavaScript 执行结果:", result)

e. py-mini-racer方式

PyMiniRacer 是一个 Python 模块,它提供了一个轻量级、快速且安全的方式来执行 JavaScript 代码,无需借助完整的 V8 引擎或 Node.js 环境。

不知道佬们用的多不多,据说速度比PyExecJS快不少。

直接安装:

pip install py_mini_racer==0.6.0

运行:

#! -*-conding=: UTF-8 -*- from py_mini_racer import MiniRacer if __name__ == '__main__': # 创建 PyMiniRacer 实例 ctx = MiniRacer() js_code = """ function add(a, b) { return a + b; } """ # 在 JavaScript 环境中执行代码并传递参数 ctx.eval(js_code) result = ctx.call("add", 3, 5) # 输出执行结果 print("JavaScript 执行结果:", result) # JavaScript 执行结果: 8

小结

Python 中执行和调用 JavaScript 代码有多种方法:

  • PyExecJS、Js2Py、py-mini-racer 提供了在 Python 中执行 JavaScript 代码的简单方法。
  • Selenium 、DrissionPage 和 Playwright 则更适用于与 Web 页面进行交互和执行 JavaScript。
  • subprocess 模块则为与 Node.js 进行交互提供了便捷的方式。

每种工具都有其适用的场景和局限性,选择合适的工具取决于具体的需求和项目要求。

原文链接:https://juejin.cn/post/

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/162465.html

(0)
上一篇 2024-12-15 21:00
下一篇 2024-12-15 21:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信