【学习心得】Python调用JS的三种常用方法

        在做JS逆向的时候,一种情况是直接用Python代码复现JS代码的功能,达成目的。但很多时候这种方法有明显的缺点,那就是一旦JS代码逻辑发生了更改,你就得重写Python的代码逻辑非常不便。于是第二种情况就出现了,我直接得到你的JS代码片段,用Python去操作JS运行,并得到结果。这种做法的好处在于可以将JS代码看成一个黑盒子,我不关心里面是怎么写的,我只在乎是否输出了正确的结果。

方法一、用Python的pyexecjs库

pyexecjs库允许在Python环境中执行JavaScript代码,无需浏览器环境。在我的另一篇文章中详细讲了pyexecjs库的用法,大家可以去看看哦!

http://t.csdnimg.cn/Eo29Dicon-default.png?t=N7T8http://xn--pythonpyexecjs-082ha0760esa4358l6pybfnik9rvpff4ap62eee2q

优点:

  • 简单易用,无需启动浏览器环境即可执行JavaScript代码。
  • 在内存中执行JavaScript代码,性能相对较高。

缺点:

  • 只能执行纯JavaScript代码,无法处理DOM操作或者利用浏览器特性的功能(如Web API、HTML5特性等)。
  • 需要系统安装支持的JavaScript运行时环境(如Node.js或Rhino等)。
  • 对于复杂或依赖特定环境的JavaScript代码支持有限。

方法二、Python的selenium库

        selenium主要用于Web自动化测试,它可以启动一个真实的浏览器(如Chrome、Firefox等)并模拟用户操作。若要执行JavaScript代码,可以利用execute_script方法。至于如何使用execute_script我这里给出一段参考的代码:

# 导入webdriver模块中的Options类(这里省略了import语句)
chrome_option = Options()

# 设置Chrome浏览器启动选项,使其在无头模式下运行,即不显示用户界面
chrome_option.add_argument("--headless")

# 禁用GPU硬件加速,这对于某些系统在headless模式下运行时是必要的
chrome_option.add_argument("--disable-gpu")

# 忽略SSL证书错误,防止因为证书问题导致的网页加载失败
chrome_option.add_argument('--ignore-certificate-errors')

# 使用前面设置好的Chrome启动选项实例化一个Chrome浏览器对象
browser = webdriver.Chrome(options=chrome_option)

# 定义要访问的网址,并使用浏览器打开该网址
url = "替换成你想要处理的网址"
browser.get(url)

# 在当前页面上执行一段JavaScript代码,并获取其返回结果
result = browser.execute_script("你想执行的JS代码片段")

# 输出执行JavaScript后得到的结果
print(result)

# 暂停程序运行10秒,确保有足够时间进行页面加载或执行后续操作
time.sleep(10)

# 关闭并退出浏览器
browser.quit()

优点:

  • 真实的模拟浏览器环境执行JavaScript代码,因此能够处理与DOM相关的操作,以及调用浏览器提供的所有Web API和HTML5特性。
  • 适用于网页自动化测试和爬虫开发等场景,对网页动态加载内容有良好的支持。

缺点:

  • 执行速度相比直接在内存中执行JavaScript慢,因为需要启动和控制一个完整的浏览器实例。
  • 使用成本相对较高,需要配置对应的浏览器驱动程序。
  • 若只是简单的JavaScript计算任务,使用selenium显得较为笨重。

方法三、用node.js搭建一个HTTP API后台服务接口,开放给Python代码调用

        首先,在Node.js中创建一个HTTP服务器,并暴露执行JavaScript功能的API。然后,在Python中调用这个HTTP API来执行JavaScript代码

优点:

  • 提供了一种跨语言交互的解决方案,Python可以通过HTTP请求调用Node.js服务端的JavaScript代码,灵活性较强。
  • Node.js服务可以封装复杂的JavaScript逻辑,并进行优化和安全控制,提供给Python或其他客户端调用。
  • 可以复用已有的JavaScript模块和生态系统

缺点:

  • 需要额外搭建并维护一个HTTP服务,增加了系统的复杂性和部署成本。
  • HTTP请求存在网络延迟,不适合对响应时间要求极高的场景
  • 如果API设计不当或未做足够的安全性验证,可能带来安全风险。例如,在上述示例中直接执行用户提供的JavaScript代码是极其危险的,应避免在生产环境中这样做。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/420021.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ccadmin - 可免费试用的 FreeSWITCH web管理后台

ccadmin - FreeSWITCH web管理后台 简介免费测试在线预览功能说明 简介 顶顶通呼叫中心中间件Web后台管理系统简称CCAdmin-Web,用于管理和配置顶顶通呼叫中心中间件。因为顶顶通呼叫中心中间件是基于FreeSWITCH开发的,所以CCAdmin本质上也是一个FreeSWI…

【论文精读】DINOv2

摘要 学习与特定任务无关的预训练表示已经成为自然语言处理的标准,这些表示不进行微调,即可在下游任务上明显优于特定任务模型的性能。其主要得益于使用无监督语言建模目标对大量原始文本进行预训练。 遵循NLP中的这种范式转变,以探索计算机视…

C语言第三十三弹---动态内存管理(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 动态内存管理 1、为什么要有动态内存分配 2、malloc和free 2.1、malloc 2.2、free 3、calloc和realloc 3.1、calloc 3.2、realloc 4、常见的动态内存的错…

《Spring Security 简易速速上手小册》第5章 高级认证技术(2024 最新版)

文章目录 5.1 OAuth2 和 OpenID Connect5.1.1 基础知识详解OAuth2OpenID Connect结合 OAuth2 和 OIDC 5.1.2 重点案例:使用 OAuth2 和 OpenID Connect 实现社交登录案例 Demo 5.1.3 拓展案例 1:访问受保护资源案例 Demo测试访问受保护资源 5.1.4 拓展案例…

Redis 【1】—— 安装 与 配置

Redis 【1】—— 安装 与 配置 一、安装 与 配置(一)使用 yum 安装(二)创建符号链接1. 软链接2. 相关指令 (三)修改配置文件(四)Redis 的启停 一、安装 与 配置 (一&…

金融短信群发平台具有那些特点

金融短信群发平台的特点主要包括以下几个方面: 1.高效性:金融短信群发平台能够快速地发送大量的短信,使得金融信息能够迅速传达给目标客户,保证了信息的及时性和有效性。 2.安全性:金融短信群发平台对于信息的安全性非…

MySQL 主从读写分离入门——基本原理以及ProxySQL的简单使用

一、读写分离工作原理 读写分离的工作原理:在大型网站业务中,当单台数据库无法满足并发需求时,通过主从同步方式同步数据。设置一台主服务器负责增、删、改,多台从服务器负责查询,从服务器从主服务器同步数据以保持一…

本届挑战赛冠军方案:基于LLM的多场景智能运维

本文介绍本届挑战赛冠军得主SRE-Copilot团队的参赛方案:基于LLM的多场景智能运维。 基础架构-SRE,负责字节跳动基础架构部门所有组件的SRE工作,沿着成本、稳定性、效率、服务四条主线,致力于打造高扩展、高可用的生产系统。基础架…

2024年【烟花爆竹经营单位安全管理人员】免费试题及烟花爆竹经营单位安全管理人员试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 烟花爆竹经营单位安全管理人员免费试题根据新烟花爆竹经营单位安全管理人员考试大纲要求,安全生产模拟考试一点通将烟花爆竹经营单位安全管理人员模拟考试试题进行汇编,组成一套烟花爆竹经营单…

Linux设置程序任意位置执行(设置环境变量)

问题 直接编译出来的可执行程序在执行时需要写出完整路径比较麻烦,设置环境变量可以实现在任意位置直接运行。 解决 1.打开.bashrc文件 vim ~/.bashrc 2.修改该文件(实现将/home/zhangziheng/file/seqrequester/build/bin,路径下的可执…

四、《任务列表案例》后端程序实现和测试

本章概要 准备工作功能实现前后联调 4.1 准备工作 数据库脚本 CREATE TABLE schedule (id INT NOT NULL AUTO_INCREMENT,title VARCHAR(255) NOT NULL,completed BOOLEAN NOT NULL,PRIMARY KEY (id) );INSERT INTO schedule (title, completed) VALUES(学习java, true),(学…

spring cloud 入门

​ 学习目标: 学习spring cloud项目快速搭建方法,学习nacos注册中心使用,实现两个服务间的调用 学习内容: 一、Spring Cloud介绍 Spring 以 Bean(对象) 为中心,提供 IOC、AOP 等功能。Sprin…

使用链表和数组输出A~Z的ASCII码

输出结果 26个字母以及其对应的ASCII码 一、使用链表创建,注意: 节点需要有next指针初始化时head需要new一下 cur指针代表当前指针,每次不断的New新的节点,pre指针代表当前指针的前一个指针,每次pre的next指针指向cur…

Unity将4个纹理图拼接成1个纹理

需要的效果 最终实现的效果大概如下: 4个贴图上去 这里随便放一个切分的图。 Shader代码如下 直接上代码: // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)// Unlit shader. Simplest possible textured shad…

基础小白快速入门Python------>模块的作用和意义

模块, 这个词听起来是如此的高大威猛,以至于萌新小白见了瑟瑟发抖,本草履虫见了都直摇头,好像听上去很难的样子,但是但是,年轻人,请听本少年细细讲述,他只是看起来很难,实…

猫毛过敏养猫人士的必备养猫好物-宠物空气净化器品牌分享

许多猫奴在与猫相处一段时间后突然对猫毛过敏,这真是令人难受。一些人认为对猫咪过敏是因为它们在空气中飘浮的毛发引起的,但实际上大部分人之所以过敏是因为对猫身上一种微小的蛋白质过敏。这种导致过敏的蛋白质附着在猫咪的一些皮屑上。我们都知道猫咪…

uniapp同步将本地图片转换为base64,支持微信、H5、APP

接上篇,少了一个方法的源代码。 先上代码: ploadFilePromiseSync (url) > { return new Promise((resolve, reject) > { // #ifdef MP-WEIXIN uni.getFileSystemManager().readFile({ filePath: url, encoding: base64, success: res > { let …

总结一下linux性能检测和调优手段

1.perf 是 Linux 系统中性能分析工具,用于收集性能相关的信息。它可以用于查看 CPU 使用情况、内存性能、磁盘 I/O 等,以帮助开发者找到性能瓶颈。 以下是一些 perf 常见用法和示例: 1. CPU Profiling a. 查看 CPU 使用率 perf stat -e cpu…

C++ 快速排序快速选择

目录 1、75. 颜色分类 2、912. 排序数组 3、 215. 数组中的第K个最大元素 4、LCR 159. 库存管理 III 1、75. 颜色分类 思路:利用快速排序思路,使用三指针分块进行优化。 [0,left]——小于key[left1,right-1]——等于key[right,nums.size()]——大于k…

金三银四跳槽季,你不得不知道的5个面试技巧

正式进入金三银四招聘季了,即将投入求职大战的小伙伴们,你真的准备好了吗? 别急,在参加面试前,请你看完这篇文章,相信面试成功率会提升不少。 1 “能力不如你,却薪资比你高” 背后隐藏的逻辑 …