import json
import time
import requests
import websocket
def eval_js_in_opera(js_code):
"""Отправляет JavaScript-код прямо в открытую вкладку Opera GX"""
try:
# 1. Получаем список открытых вкладок
res = requests.get("http://127.0.0.1:9222/json").json()
# Ищем вкладку с шашками
target_tab = None
for tab in res:
if tab.get("type") == "page" and "checkers" in tab.get("url", ""):
target_tab = tab
break
# Если вкладка не найдена по слову checkers, берем первую активную
if not target_tab:
for tab in res:
if tab.get("type") == "page":
target_tab = tab
break
if not target_tab:
print("Не найдено открытых страниц в Opera!")
return None
# 2. Подключаемся к вкладке через WebSocket
ws_url = target_tab["webSocketDebuggerUrl"]
ws = websocket.create_connection(ws_url)
# 3. Выполняем JavaScript код
payload = {
"id": 1,
"method": "Runtime.evaluate",
"params": {
"expression": js_code,
"returnByValue": True
}
}
ws.send(json.dumps(payload))
response = json.loads(ws.recv())
ws.close()
# Возвращаем результат
return response.get("result", {}).get("result", {}).get("value")
except Exception as e:
print(f"Ошибка связи с Opera: {e}")
return None
# --- ЗАПУСК ОТСЛЕЖИВАНИЯ ---
print("Подключение к Opera GX по DevTools Protocol...")
last_board = None
try:
while True:
# Выполняем JS-команду получения поля
board = eval_js_in_opera("checkers.engine.getField();")
if board:
if board != last_board:
print("\n=== АКТУАЛЬНАЯ ДОСКА ===")
for row in board:
print(row)
last_board = board
else:
print("Убедитесь, что Opera открыта и на странице запущены шашки.")
time.sleep(2)
except KeyboardInterrupt:
print("\nСкрипт остановлен.")