码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 用Python执行JavaScript代码,这些方法你不可不知!


    目录

    1、PyExecJS:轻量级桥梁 🌉

    1.1 安装与配置

    1.2 执行JS代码示例

    1.3 案例:数据交互与转换

    1.4 错误处理与性能考量

    2、Node.js子进程 🌀

    2.1 准备工作:安装Node.js

    2.1 利用subprocess模块

    2.2 实时数据交换技巧

    2.3 实战:跨语言API调用

    3、Selenium驱动的JS执行策略 🚗

    3.1 Selenium安装与基础

    3.2 在浏览器环境中执行JS

    3.3 应用场景:自动化测试与数据抓取

    自动化测试

    数据抓取

    4、Webview集成策略 🌐

    4.1 Webview基础

    4.2 在Python应用内嵌浏览器

    4.3 JS交互与数据同步

    4.4 实例:桌面应用中的动态内容处理

    5、总结与展望 🚀



    1、PyExecJS:轻量级桥梁 🌉

    1.1 安装与配置

    在Python环境中执行JavaScript代码,PyExecJS提供了一个便捷的接口。首先,确保你的Python环境已安装pip,然后通过运行以下命令安装PyExecJS库:

    pip install pyexecjs

    安装完成后,无需特殊配置 ,PyExecJS会自动寻找系统中可用的JavaScript运行环境(如Node.js)。

    1.2 执行JS代码示例

    下面是一个简单的示例,展示如何使用PyExecJS执行JavaScript代码并获取结果。我们将计算一个简单的JavaScript表达式:

    1. import execjs
    2. # 定义JavaScript代码
    3. js_code = """
    4. function add(a, b) {
    5.     return a + b;
    6. }
    7. add(2, 3);
    8. """
    9. # 使用PyExecJS执行JavaScript代码
    10. result = execjs.eval(js_code)
    11. print("结果是:", result)

    运行上述Python脚本,输出将是:

    结果是: 5

    也可以这样调用:

    1. import execjs
    2. # JavaScript代码作为字符串传递
    3. js_code = """
    4. function add(a, b) {
    5.     return a + b;
    6. }
    7. """
    8. # 创建ExecJS实例并执行代码
    9. context = execjs.compile(js_code)
    10. result = context.call("add", 3, 5)
    11. print(result)  # 输出:8

    这段代码展示了如何定义一个简单的JavaScript函数并在Python中调用它。

    1.3 案例:数据交互与转换

    一个实用场景是利用JavaScript处理特定格式的数据 ,比如解析来自网页的JSONP响应。考虑如下需求:从一个JSONP API获取数据并解析其中的JSON内容。

    1. # 假设我们有以下JSONP格式的字符串
    2. jsonp_response = "handleResponse({\"data\": \"Hello from JSONP\"})"
    3. # 编写JavaScript代码来处理JSONP
    4. js_code_for_jsonp = """
    5. function handleResponse(response) {
    6.     return JSON.parse(response.substring(response.indexOf('{')));
    7. }
    8. """
    9. # 编译并执行JavaScript代码处理响应
    10. context = execjs.compile(js_code_for_jsonp)
    11. parsed_data = context.call("handleResponse", jsonp_response)
    12. print(parsed_data)  # 输出:{'data': 'Hello from JSONP'}

    通过这种方式,我们成功地在Python中利用JavaScript处理了特定的JSONP格式数据,展现了PyExecJS在跨语言数据处理方面的灵活性。

    1.4 错误处理与性能考量

    当使用PyExecJS执行复杂或大量JavaScript代码时,注意性能和错误处理。如果JavaScript代码中存在错误,execjs.eval()会抛出异常 ,可以通过try-except结构捕获并处理这些错误:

    1. try:
    2.     # 尝试执行可能出错的JS代码
    3.     problematic_js = "var x; y = x + 2;"
    4.     execjs.eval(problematic_js)
    5. except Exception as e:
    6.     print("执行时遇到错误:", e)

    对于性能敏感的应用,尽量减少JavaScript代码的执行次数,或者考虑在更高效的环境中直接执行JavaScript代码(如Node.js环境) ,再通过其他方式与Python通信。同时,监控内存使用,因为长时间运行或大量数据处理可能会导致内存泄漏。

    2、Node.js子进程 🌀

    2.1 准备工作:安装Node.js

    首先,确保您的开发环境已安装Node.js。访问Node.js官方网站下载并安装适合您操作系统的最新稳定版。安装完成后,通过终端或命令提示符运行node -v检查安装是否成功,预期会显示Node.js的版本号。

    2.1 利用subprocess模块

    在Python中通过subprocess模块启动Node.js子进程,可以实现与Node.js环境的交互。这适用于需要利用Node.js特定库或功能的场景。以下是一个基础示例,展示如何启动Node.js脚本并获取其输出:

    1. import subprocess
    2. # Node.js脚本内容,这里简单输出'Hello from Node.js'
    3. node_script = """
    4. console.log('Hello from Node.js');
    5. """
    6. # 将脚本内容写入临时文件
    7. with open('temp_node_script.js', 'w') as f:
    8.     f.write(node_script)
    9. # 使用subprocess执行Node.js脚本
    10. process = subprocess.Popen(['node', 'temp_node_script.js'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    11. output, error = process.communicate()
    12. # 输出结果并清理临时文件
    13. print(output.decode('utf-8').strip())
    14. import os
    15. os.remove('te
  • 相关阅读:
    SMS--短信服务
    倒数 3 天|RocketMQ 能力全景图即将发布,定义下一代消息队列未来方向
    领先特斯拉,中国电车制造商“登陆”东南亚,电气化潮流一触即发
    LeetCode904-水果成篮
    ThreadLocal(4):ThreadLocal的核心方法源码
    Vue.js+SpringBoot开发个人健康管理系统
    第31届中国国际测量控制与仪器仪表展览会隆重举行,汉威科技创新产品精彩亮相
    【软件安装】Centos系统中安装docker容器(华为云HECS云耀服务器)
    Django 的 settings 全局配置文件
    ReentrantLock可重入、可打断、Condition原理剖析
  • 原文地址:https://blog.csdn.net/xyh2004/article/details/139858095
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号