Как подключить расширение узлаPython

Программы на Python
Ответить
Anonymous
 Как подключить расширение узла

Сообщение Anonymous »

Я пытаюсь использовать этот код для прямого подключения к узлу градиента (расширение mqtt). После попытки подключения я всегда получаю одно и то же сообщение:

< Получено: WSMessage(type=, data=1000, extra=' ') >

Чтобы делать следующие шаги в моем проекте, необходимо знать, подключен ли я к веб-сокету. Итак, я предполагаю использовать разные подходы, чтобы получить полезное сообщение, например ({"ошибка": "неверный токен"}), но всегда получать один и тот же результат.
import json
import time
import uuid
import asyncio
import aiohttp
from aiohttp import WSMsgType

class GrassWs:
def __init__(self, user_agent: str = None, proxy: str = None):
self.user_agent = user_agent or 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36'
self.proxy = proxy
self.session = None
self.websocket = None
self.user_id = 'z6QU3Kfs1HfDfyUOHSCbjX5Ic4l1'
self.browser_id = str(uuid.uuid3(uuid.NAMESPACE_DNS, self.proxy or ""))

async def connect(self):
uri = "wss://wss.gradient.network/mqtt"
headers = {
'Pragma': 'no-cache',
'Origin': 'chrome-extension://caacbgbklghmpodbdafajbgdnegacfmo',
'Accept-Language': 'en-US,en;q=0.9,uk;q=0.8,ru-RU;q=0.7,ru;q=0.6,en-GB;q=0.5,pl;q=0.4',
'Sec-WebSocket-Key': 'LrA0qPyzg/9bGVBSQYZGdg==',
'User-Agent': self.user_agent,
'Upgrade': 'websocket',
'Cache-Control': 'no-cache',
'Connection': 'Upgrade',
'Sec-WebSocket-Version': '13',
'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
'Sec-WebSocket-Protocol': 'mqtt'
}
self.websocket = await self.session.ws_connect(uri, headers=headers, proxy=self.proxy)

async def send_message(self, message):
await self.websocket.send_str(message)

async def receive_message(self):
msg = await self.websocket.receive()
if msg.type == WSMsgType.CLOSED:
print("WebSocket connection closed.")
return None
elif msg.type == WSMsgType.TEXT:
return msg.data # Текстовое сообщение от WebSocket
else:
print(f"Received non-text message: {msg.type}")
return None

async def get_connection_id(self):
msg = await self.receive_message()
if msg: # Проверяем, что msg не None
try:
data = json.loads(msg)
return data.get('id')
except json.JSONDecodeError:
print("Received message is not valid JSON:", msg)
return None
else:
print("No message received.")
return None

async def auth_to_extension(self, browser_id: str, user_id: str):
connection_id = await self.get_connection_id()
if not connection_id:
return False
message = json.dumps({
"id": connection_id,
"origin_action": "AUTH",
"result": {
"browser_id": browser_id,
"user_id": user_id,
"user_agent": self.user_agent,
"timestamp": int(time.time()),
"device_type": "extension",
"version": "4.26.2",
"extension_id": "caacbgbklghmpodbdafajbgdnegacfmo"
}
})
await self.send_message(message)
return True

async def send_ping(self):
message = json.dumps({
"id": str(uuid.uuid4()),
"version": "1.0.0",
"action": "PING",
"data": {}
})
await self.send_message(message)

async def keep_alive(self):
while True:
try:
await self.send_ping()
print("Sent: PING message")
response = await self.receive_message()
print(f"Received: {response}")
await asyncio.sleep(30) # Send PING every 30 seconds
except Exception as e:
print(f"Error: {e}")
print("Reconnecting...")
await self.connect()
await self.auth_to_extension(self.browser_id, self.user_id)

async def main():
ws_client = GrassWs()
async with aiohttp.ClientSession() as session:
ws_client.session = session
await ws_client.connect()
print("Connected to WebSocket server.")
await ws_client.auth_to_extension(ws_client.browser_id, ws_client.user_id)
print("Sent authentication message.")
await ws_client.keep_alive() # Maintain connection for farming points

# Запуск асинхронного кода
asyncio.run(main())


Подробнее здесь: https://stackoverflow.com/questions/791 ... -extension
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»