JS的解析与Js2Py使用

news2024/10/5 18:31:03

JS的解析与Js2Py使用

  • JS的解析
    • 事件监听器
    • 搜索关键字
    • 请求关联JS文件
  • Js2Py
  • Js2Py的简单使用
    • 安装Js2Py
    • 执行JavaScript代码
    • 调用JavaScript函数
  • Js2Py的应用示例
    • 创建JavaScript文件
    • 使用JavaScript

JS的解析

在一个网站中,登录密码通常是会进行加密操作的,那么在Python中如何使用账号密码登录就成了一个问题,因为密码需要被加密发送到后端服务器。

此时就可以进行JS解析,通过分析JS文件就可以知道:每个按钮,每个事件、每个请求对应的JS文件,即需要确定JS文件的位置,然后分析JS代码确定执行逻辑。

JS的解析可以从三方面入手:事件监听器、搜索关键字、请求关联JS文件

事件监听器

观察按钮的绑定js事件,如确定的submit事件。

在这里插入图片描述
点击事件关联的JS文件,如:search-sug_653d65d.js,然后自动跳转到JS文件
在这里插入图片描述
找到JS具体位置之后,打断点,观察分析JS的执行逻辑 在这里插入图片描述

搜索关键字

如果网站中的某个按钮没有绑定js事件监听,那么可以通过搜索请求中的关键字来找到js的位置

点击百度一下发起请求,得到请求URL,打开搜索
在这里插入图片描述

在搜索中输入请求地址关键字进行搜索,点击搜索结果跳转到相应JS文件。

在这里插入图片描述

请求关联JS文件

通常来说,当发送一个请求时,这个请求会关联一个js文件,点击进入即可进行JS代码执行流程的分析。

在这里插入图片描述

Js2Py

Js2Py是一个用于将JavaScript代码转换为Python代码的库。它提供了一种方式来在Python环境中执行JavaScript代码,可以将JavaScript函数和对象转换为Python的函数和对象,并且能够在Python中调用这些转换后的代码。

Js2Py的工作原理是将JavaScript代码解析为抽象语法树(AST),然后将该AST转换为Python的表示形式。它支持大多数的JavaScript语法和特性,并且提供了一些额外的功能来简化JavaScript到Python的转换过程。

使用Js2Py,开发者可以在Python环境中使用JavaScript函数、库和算法,从而更方便地在不同语言之间共享代码和功能。

Js2Py就是一个JavaScript的翻译工具,也是一个通过纯python实现的JavaScript的解释器

GitHub: https://github.com/PiotrDabkowski/Js2Py

Js2Py的简单使用

安装Js2Py

要使用 Js2Py,首先需要安装该库

pip install js2py

执行JavaScript代码

使用eval_js函数执行JavaScript表达式1+2,并将结果保存在result变量中。然后通过Python的print函数将结果打印出来

from js2py import eval_js

result = eval_js('1 + 2')
print(result)  # 输出:3

调用JavaScript函数

定义一个JavaScript函数add,然后通过eval_js函数将其转换为Python函数add_func,接下来可以像在JavaScript中一样调用该函数,传入参数并获得结果。

from js2py import eval_js

js_code = '''
function add(a, b) {
    return a + b;
}
'''

add_func = eval_js(js_code)  # 将 JavaScript 函数转换为 Python 函数
result = add_func(3, 4)  # 在 Python 中调用 JavaScript 函数
print(result)  # 输出:7

Js2Py的应用示例

在一个网站中,登录密码通常是会进行加密操作的,那么在Python中如何使用账号密码登录就成了一个问题,因为密码需要被加密发送到后端服务器。

此时就可以通过JS分析,获取目标网站的登录过程,分析登录密码的加密过程、逻辑,在得知加密过程、逻辑后,就可以将此JS加密逻辑封装处理成一个JS文件

然后通过Js2Py将此JS代码加载到Python执行环境中,通过Python代码调用加密函数获得加密密码,以此进行登录。

创建JavaScript文件

创建js-file.js文件,用于模拟登录密码加密

function test(password) {
    password = password.split("").reverse().join("");
    return password;
}

使用JavaScript

import js2py
import requests

#  获取session对象
session = requests.session()
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
}

# 设置session的请求头信息
session.headers = headers

# 使用js2py生成js的执行环境context
context = js2py.EvalJs()

####################### 将需要用到的JS文件加载到执行环境中,有2种方式 #######################

# 1.拷贝使用到js文件的内容到执行环境\项目中
with open("js-file.js", 'r', encoding='utf8') as f:
    context.execute(f.read())

# 2.通过网络请求,读取js文件的内容,使用context来执行
# getJs = requests.get("url", headers=headers).content.decode();
# context.execute(getJs)

# 向context环境中添加需要数据
context.oldPwd = {'password': "my_password"}

#  执行密码加密的js函数
js = '''
       newPwd = test(oldPwd.password)
      '''
context.execute(js)

# 通过context获取加密后密码信息
password = context.newPwd
print("加密前的密码:{} 加密后的密码:{}".format(context.oldPwd.password, password))

# 构建请求参数
data = {
    'username': 'username',
    'password': password,
}

#  使用session发送登录请求
response = session.post("http://localhost:8888/user/login", data=data)
print(response.content.decode())

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

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

相关文章

LeetCode--HOT100题(34)

目录 题目描述:94. 二叉树的中序遍历(简单)题目接口解题思路1代码解题思路2代码 PS: 题目描述:94. 二叉树的中序遍历(简单) 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 LeetCode做…

el-table根据容器大小自适应滚动条-修改滚动条样式

需求:父容器里有多个容器为上下级,之后浏览器在缩放的时候,上面容器高度改变了,所以el-table被挤压,如果el-table设置的是固定的高度,那么挤压后内容超出父容器,本文章就是解决这个问题 不自适…

拒绝无效内卷!新同事靠着这套大屏模板效率翻倍,搭上升职快车!

竞争是职场永恒的话题,太多人为了升职加薪卷生卷死,就拿我自己身边来说,这段时间我所在的小组有一个升职机会,好多老员工为了这个机会争得头破血流,一个在公司待了10年的老员工,直接天天加班到12点&#xf…

蓝牙耳机的发展

目录 1.蓝牙耳机的概念 2.蓝牙耳机的发展过程 3.蓝牙耳机的便利性 4.蓝牙耳机未来的发展趋势 1.蓝牙耳机的概念 蓝牙耳机是一种使用蓝牙无线技术连接到音频源设备(如智能手机、平板电脑、电脑等)的耳机。它们通过无线蓝牙信号接收音频数据&#xff0c…

MybatisPlus的使用

一. 关于注解的使用,官方地址: 注解 | MyBatis-PlusMyBatis-Plus 官方文档https://baomidou.com/pages/223848/#tablename 1.关于TableName的使用 假设我们不加TableName("tbl_employee")的话,那么数据库中的表名和类名相同的话&…

Qt下拉菜单

1,QComboBox 2,setMenu()---设置下拉菜单 AI对话未来丨智能写作对话: setMenu()是QWidget类的一个成员函数,在Qt中用于将一个菜单作为一个控件的下拉菜单设置。具体来说,它会把相应的菜单对象与该控件关联,并在控件上…

Mysql8.0为什么取消了缓存查询的功能

首先我们介绍一下MySQL的缓存机制 【MySQL缓存机制】简单的说就是缓存sql文本及查询结果,如果运行完全相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL。 但如果表中任何数据或是结构发生改变,包括INSERT、UPD…

问道管理:放量打拐什么意思?常见的放量打拐三种形态?

成交量一直是股票交易中比较重要的目标,那么,放量打拐是什么意思?常见的放量打拐三种形状是什么?下面问道管理为我们预备了相关内容,以供参阅。 放量打拐什么意思? 放量是指股票成交量与前几个交易日比较显…

隐私文件夹怎么加密?隐私文件夹加密方法

在个人电脑中,我们经常会将一些个人隐私存放在电脑文件夹中,这些文件夹都需要加密保护。那么,隐私文件夹该怎么加密呢?下面我们就来了解一下吧。 超级秘密文件夹 隐私数据存放在文件夹中,最怕的就是被其他人发现。而如…

迅镭激光中标全球集装箱行业龙头中集集团10家子公司集采项目!

迅镭激光中标喜报频传!继连续中标工程机械、钢构、船舶、电力电气、新能源等多个行业龙头企业后,近日再次中标全球集装箱行业龙头中集集团(CIMC),这与迅镭激光坚持高端、注重技术引领、十五年的技术沉淀和口碑积累密不可分。 日前,中集集团20…

如何使用ChatGPT创作一个小说式的虚构的世界

世界构建也许是小说写作中最重要的一环,但也可能非常耗时。让ChatGPT加快这一过程吧。 写小说最棒的一点就是有机会从零开始创造一个新世界。你可以创造超凡脱俗的景观,赋予人物魔法。神话故事可以存在于你小说中的现实世界,而传统可以帮助你…

gazebo仿真ros2两轮差速小车没有控制的情况下缓慢移动后退

最近在做一款2轮差速的机器人小车&#xff0c;在做gazebo仿真的时候&#xff0c;发现小车一直在缓慢的后退&#xff0c;一边后退一边缓慢拐弯。 环境&#xff1a;ros2 foxy gazebo-11 小车xacro模型代码 <?xml version"1.0"?> <robot name"jtb…

华为OD机试 - 查找接口成功率最优时间段 - 回溯(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

【图书推荐 | 测试】—《测试设计思想》

前言 随着科技的不断发展&#xff0c;互联网的不断进步&#xff0c;日益出现了一种趋势&#xff1a;测试设计将成为一种跨领域的综合性工作&#xff0c;测试者将成为一种跨领域的通用型人才。由此清华大学出版社推出了一本名为《测试设计思想》的书籍&#xff0c;由知名专家周…

分析Flink,源和算子并行度不一致时,运行一段时间后,看似不再继续消费的问题,提供解决思路。

文章目录 背景分析 问题来了比较一开始的情况解决方式 背景 之前有分析过一次类似问题&#xff0c;最终结论是在keyby之后&#xff0c;其中有一个key数量特别庞大&#xff0c;导致对应的subtask压力过大&#xff0c;进而使得整个job不再继续运作。在这个问题解决之后&#xff…

数据分析15——office中的Excel基础技术汇总

0、前言&#xff1a; 这部分总结就是总结每个基础技术的定义&#xff0c;在了解基础技术名称和定义后&#xff0c;方便对相关技术进行检索学习。笔记不会详细到所有操作都说明&#xff0c;但会把基础操作的名称及作用说明&#xff0c;可自行检索。本文对于大部分读者有以下作用…

火山引擎DataLeap:助力PICO落地数据流程规范,提升开发效率

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 作为目前中国市场领跑的头部XR品牌之一&#xff0c;字节跳动旗下的PICO已经拥有了超百万客户。 过去一年&#xff0c;PICO在XR场景中不断建设和发力&#xff0c;为运…

更好的 3D 网格,从重建到生成式 AI

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 这些生成的 3D 模型通常提取为标准三角形网格。网格表示提供了许多好处&#xff0c;包括支持现有软件包、高级硬件加速和支持物理仿真。但是&#xff0c;并非所有网格都是平等的&#xff0c;这些优势只…

在南非发现地球上最古老冰川的证据

古老的冰川暗示着太古代地球在某些方面可能与我们所处的时代相似。 29 亿年前的地球可能有像阿根廷南部冰川国家公园的佩里托莫雷诺冰川这样的冰川。图片来源&#xff1a; Martin St-Amant/维基百科 《地球化学展望快报》上发表的一项 新研究报告称&#xff0c;早在 30 亿年前…