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

news2025/1/12 12:12:37

        在做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代码是极其危险的,应避免在生产环境中这样做。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CDN CloudFlare 接入 OCI 对象存储

在当今数字化时代,网站性能和可用性是业务成功的关键。为了提供快速且可靠的访问体验,许多组织正在寻找有效的内容分发网络(CDN)解决方案。CloudFlare作为业界领先的CDN提供商,其强大的全球网络基础设施能够加速网站内…

UE学习笔记--解决滚轮无法放大蓝图、Panel等

我们发现有时候创建蓝图之后,右上角的缩放是1:1 但是有时候我们可能需要放的更大一点。 发现一直用鼠标滚轮像上滚动,都没有效果。 好像最大只能 1:1. 那是因为 UE 做了限制。如果希望继续放大,我们可以按住 Ctrl 再去…

Excel常用公式总结非常实用

16个最实用的Excel万能公式 1、多条件判断 IF(And(条件1,条件2..条件N),条件成立返回值) IF(or(条件1,条件2..条件N),条件成立返回值) 2、多条件查找 Lookup(1,0/((条件1*条件2*...条件N)),返回值区域) 3、多条件求和 Sumifs(值区域,判断区域1,条件1,判断区域2,条…

hive报错:FAILED: NullPointerException null

发现问题 起因是我虚拟机的hive不管执行什么命令都报空指针异常的错误 我也在网上找了很多相关问题的资料,发现都不是我这个问题的解决方法,后来在hive官网上与hive 3.1.3版本相匹配的hadoop版本是3.x的版本,而我的hadoop版本还是2.7.2的版本…

opencv VideoCapture

videocapture顾名思义视频捕捉,主要是从视频文件、摄像头或网络摄像头获取视频流数据,并将其作为一系列帧进行处理。 我们这里主要实现了获取项目文件夹下的1.mp4视频文件,然后经过灰度变化、均值滤波、边缘检测然后将视频显示出来 #include…

MySQL的索引和B+tree结构

目录 0.关于索引的常见面试题 1.什么是索引? 索引的优缺点 2.索引的数据结构,为什么InnoDb引擎使用Btree作为索引的数据结构? 分析怎样的索引才是好的 二插搜索树 红黑树 B-Tree BTree 哈希 为什么 InnoDB 存储引擎选择使用 Btree 索…

初学HTMLCSS——盒子模型

盒子模型 盒子:页面中所有的元素(标签),都可以看做是一个 盒子,由盒子将页面中的元素包含在一个矩形区域内,通过盒子的视角更方便的进行页面布局盒子模型组成:内容区域(content&…

商城系统_大型商城系统源码_免费开源商城_OctShop

随着互联网对各行各业的渗透,以及人们网络购物的习惯已经形成,很多商家或企业都开始搭建与开发自己的商城系统平台。商城系统是一个以互联网技术为基础,依托电子商务的电商系统平台。一般大型的的商城系统都会有前台各种客户端,如…

JVM原理-基础篇

Java虚拟机(JVM, Java Virtual Machine)是运行Java应用程序的核心组件,它是一个抽象化的计算机系统模型,为Java字节码提供运行环境。JVM的主要功能包括:类加载机制、内存管理、垃圾回收、指令解释与执行、异常处理与安…

2023年世界前沿科技发展态势及2024年趋势展望——综述篇

源自:全球技术地图 “人工智能技术与咨询” 发布 一、2023年前沿科技发展与竞争态势总结 (一)人工智能引领前沿技术加速进步,产业应用一触即发,技术奇点苗头出现 (二)科技之变引发战争形态之…

帆软图片设置之一张图片铺满整个屏幕

1、设置PC端自适应属性,字体自适应,双向自适应; 2、单元格属性–>对齐–>高级–>图片布局–>拉伸。

欧拉-黎曼函数的K阶近似(OpenMP实现和MPI实现)

目录 欧拉-黎曼函数的K阶近似&#xff08;OpenMP实现和MPI实现&#xff09;问题描述OpenMP代码实现MPI代码实现 注意事项运行参考资料 欧拉-黎曼函数的K阶近似&#xff08;OpenMP实现和MPI实现&#xff09; 问题描述 OpenMP代码实现 #include <stdio.h> #include <s…

HarmonyOS云端一体化组件之AGC应用管理

&#xff08;可选&#xff09;在AGC控制台创建同包名应用 如创建工程时&#xff0c;发现尚未在AGC控制台创建与工程包名相同的应用&#xff0c;可进行补充创建。 1.点击界面提示内的“AppGallery Connect”&#xff0c;浏览器打开AGC控制台“我的项目”页面。 2.点击选择您希…

工厂模式:没你想像的那么难

工厂模式 工厂模式是一种创建型设计模式&#xff0c;它允许创建对象而无需指定将要创建的对象的具体类。它通过将对象的创建委托给一个单独的方法或类来完成&#xff0c;从而隐藏了对象的实例化逻辑。这样可以提高代码的灵活性&#xff0c;减少了代码中的重复和耦合。 在工厂…

社会底层人民要被人工智能和机器人淘汰了吗?你害怕被AI代替吗?

随着科技的飞速发展&#xff0c;人工智能和机器人技术已经成为我们日常生活中不可或缺的一部分。这些技术的广泛应用引发了一些担忧&#xff0c;其中之一就是社会底层人民是否会被人工智能和机器人所淘汰。然而&#xff0c;这个问题并不是非黑即白的&#xff0c;它需要从多个角…

excel导出标准化

虽然标题叫标准化&#xff0c;只不过是我自己的习惯&#xff0c;当一件事情变得流程标准化之后&#xff0c;开发程序就会飞快&#xff0c;开发评估工作总是 搞个1~2天&#xff0c;实则前端后端一起开发&#xff0c;1个小时就可以搞定。 1 前端 const exportXls async () >…

2024环境工程、能源系统与化学材料国际会议(ICEEESCM 2024)

2024环境工程、能源系统与化学材料国际会议&#xff08;ICEEESCM 2024) 一、【会议简介】 2024环境工程、能源系统与化学材料国际会议&#xff08;ICEEESCM 2024)将于2024年在西安举行。会议将围绕环境工程、能源系统与化学材料等议题展开讨论&#xff0c;旨在为从事环境工程…

省赛模板构建——ADC

一般考试只考一个滑动变阻器&#xff0c;考R37的比较多 打开STM32CubeMX 四步配置 配置PB12对应R38的ADC1_IN11&#xff0c;配置PB15对应R37的ADC2_IN15 把通道11设置为单通道 时钟分频为异步/2(对应ADC的时钟来源)&#xff0c;异步一般都选2 配置最大采样周期为640.5 配置A…

Nacos进阶

目录 Nacos支持三种配置加载方案 Namespace方案 DataID方案 Group方案 同时加载多个配置集 Nacos支持三种配置加载方案 Nacos支持“Namespacegroupdata ID”的配置解决方案。 详情见&#xff1a;Nacos config alibaba/spring-cloud-alibaba Wiki GitHub Namespace方案…

vue实现自定义树形穿梭框功能

需求&#xff1a; 我们在开发过程中&#xff0c;会遇到需要将一个数据选择做成穿梭框&#xff0c;但是要求穿梭框左侧为树形结构、右侧为无层级结构的数据展示&#xff0c;ElementUI自身无法在穿梭框中添加树形结构&#xff0c;网上搜到了大佬封装的插件但是对于右侧的无树形结…