当前位置: 首页 > news >正文

JS的解析与Js2Py使用

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_jsresult = eval_js('1 + 2')
print(result)  # 输出:3

调用JavaScript函数

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

from js2py import eval_jsjs_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.lryc.cn/news/129435.html

相关文章:

  • Spring Bean的生命周期总结(包含面试题)
  • SpringjDBCTemplate_spring25
  • 设计模式——桥接模式
  • 改进YOLO系列:2.添加ShuffleAttention注意力机制
  • 利用Opencv实现人像迁移
  • Lnton羚通算法算力云平台在环境配置时 OpenCV 无法显示图像是什么原因?
  • 【JavaEE进阶】MyBatis的创建及使用
  • 职业学院物联网实训室建设方案
  • 3 个 ChatGPT 插件您需要立即下载3 ChatGPT Extensions You need to Download Immediately
  • 屏蔽socket 实例化时,握手阶段报错信息WebSocket connection to ‘***‘ failed
  • 单发多框检测(SSD)【动手学深度学习】
  • “RFID与光伏板的完美融合:探索能源科技的新时代!“
  • 算法leetcode|71. 简化路径(rust重拳出击)
  • 网络技术Vlan技术STP(第一课)
  • SpringBoo t+ Vue 微人事 (十一)
  • 自动驾驶卡车量产-第一章-用户需求
  • Nginx 配置文件的完整指南 (一)
  • css3+js 画出爱心特效
  • 蔚来李斌卖手机:安卓系统,苹果售价,一年一发
  • 0008__浏览器层面缓存 Etag If-None-Match等详解
  • Idea 快捷键整理
  • 管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——假言——第一节 充分条件
  • LSTM模型
  • 抢红包小程序
  • UVA 10006 埃氏筛法+快速幂
  • C++--红黑树
  • Unity 找不到 Navigation 组件的解决
  • 【js】时间和时间戳转换、日期格式化
  • glog体验第一天(0)glog介绍和安装
  • Android 13像Settings一样获取SIM卡信息