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())