首先说一下思路
利用浏览器插件对js文件进行替换,将浏览器解密后的数据通过ws发送到自己搭建的ws服务器来进行数据的获取
同时可以结合 drissionpage 库 来操作浏览器进行消息的发送 和 浏览器无头模式的运行
下面主要说一下js替换和ws
利用reres进行js文件的替换
解密的js文件一共有两个3569.835c3d6d.js和6055.7e83c993.js 请求网站时好像是随机返回其中的一个(我也不太清楚),总之就是要替换这两个
两个文件都是在这个地方加入红框中的js代码,如下
!function() {
var my_res = e;
if (typeof e == 'undefined') {
return;
}
if (typeof window.my_ws == 'undefined') {
try {
window.my_ws = new WebSocket('ws://localhost:9090');
} catch (e) {
console.error('ws连接发生错误:', e.message);
window.my_ws = undefined;
return;
}
window.my_ws.onclose = function() {
console.log('ws连接断开');
window.my_ws = undefined;
}
window.my_ws.onopen = function() {
console.log('ws连接成功');
window.my_ws.send(JSON.stringify(my_res));
}
window.my_ws.onerror = function() {
console.log('ws连接错误');
window.my_ws = undefined;
}
window.my_ws.onmessage = function(event) {
console.log(event.data);
}
} else {
window.my_ws.send(JSON.stringify(my_res));
}
}();
python实现ws服务用于接收解密后的数据
# -*- coding:utf-8 -*-
# @FileName :ws server.py
# @Time :2024/4/21 19:55
# @Author :有何不可
import asyncio
import json
import time
import websockets
async def handle_client(websocket, path):
while True:
try:
message = await websocket.recv()
print(f"接收到的数据: {message}")
with open(fr'.\data\{str(time.time()).replace(".", "")}.json', mode='wt', encoding='utf-8') as f:
f.write(message)
except websockets.ConnectionClosedError:
print("客户端关闭连接.")
break
async def start_server(server_address):
async with websockets.serve(handle_client, "localhost", 9090):
print(f"WebSocket server is listening on ws://{server_address}")
await asyncio.Future()
# 启动WebSocket服务器
if __name__ == "__main__":
asyncio.run(start_server("localhost:9090"))
运行效果(并未对数据进行处理)
欢迎加入企鹅:958446099 一起学习