From 2f92e81ec54ac9c7db1ed6026d8be32e5b0dc7dc Mon Sep 17 00:00:00 2001 From: Admin Date: Fri, 3 Jul 2026 10:54:44 +0400 Subject: [PATCH] =?UTF-8?q?refactor:=20Move=20GAS=20Pravosudie=20scraper?= =?UTF-8?q?=20into=20standalone=20page=20'=D0=96=D0=B0=D1=82=D0=B2=D0=B0?= =?UTF-8?q?=20=D0=93=D0=90=D0=A1'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/app.py | 4 ++ web/templates/base.html | 5 ++ web/templates/infra.html | 81 +------------------------- web/templates/sudrf.html | 120 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 131 insertions(+), 79 deletions(-) create mode 100644 web/templates/sudrf.html diff --git a/web/app.py b/web/app.py index 28152bf..96a3bee 100644 --- a/web/app.py +++ b/web/app.py @@ -842,6 +842,10 @@ async def get_infra_page(request: Request, username: str = Depends(get_current_a return templates.TemplateResponse(request=request, name="infra.html", context={"username": username, "speedtests": speedtests}) +@app.get("/sudrf") +async def sudrf_page(request: Request, username: str = Depends(get_current_admin)): + return templates.TemplateResponse(request=request, name="sudrf.html", context={"username": username}) + @app.post("/api/infra/run_speedtest") async def api_run_speedtest(username: str = Depends(get_current_admin)): script_path = "/app/infra/speedtest_monitor.py" if os.path.exists("/app/infra/speedtest_monitor.py") else "/home/matrixhasyou/infra/speedtest_monitor.py" diff --git a/web/templates/base.html b/web/templates/base.html index c4aed64..9061b50 100644 --- a/web/templates/base.html +++ b/web/templates/base.html @@ -70,6 +70,11 @@ СОБЫТИЯ +
Юрист
+ + ЖАТВА ГАС + +
Система
ИНФРАСТРУКТУРА diff --git a/web/templates/infra.html b/web/templates/infra.html index 8785f59..5fc4402 100644 --- a/web/templates/infra.html +++ b/web/templates/infra.html @@ -78,30 +78,6 @@ -
-
-
ГАС ПРАВОСУДИЕ (СУДЕБНЫЙ АРХИВ)
-
-
- -
СТАТУС: НЕИЗВЕСТНО
-
-
-
- ПОСЛЕДНИЕ ЛОГИ: - -
-

-                
Выполняет: Открытие сессии -> Ввод 2FA пользователем -> Парсинг ej.sudrf.ru -> Сборка PDF -> Google Drive
-
-
-
ДЕЙСТВИЯ
@@ -179,62 +155,9 @@ async function refreshGisStatus() { } } -document.getElementById('runSudrfParserBtn').addEventListener('click', async function() { - const btn = this; - if (!confirm('Запустить сборку судебного архива ГАС Правосудие? Потребуется войти через Госуслуги во VNC.')) return; - - btn.disabled = true; - btn.innerHTML = ' СЕССИЯ СУДОВ...'; - - try { - const response = await fetch('/api/infra/run_sudrf_parser', { method: 'POST' }); - const result = await response.json(); - alert(result.message); - } catch (e) { - alert('Ошибка: ' + e); - } finally { - btn.disabled = false; - btn.innerHTML = ' ЗАПУСТИТЬ ЖАТВУ СУДОВ'; - refreshSudrfStatus(); - } -}); - -async function refreshSudrfStatus() { - const badge = document.getElementById('sudrfStatusBadge'); - const logs = document.getElementById('sudrfLogs'); - - try { - const response = await fetch('/api/infra/sudrf_status'); - const data = await response.json(); - - if (data.alive) { - badge.className = 'badge bg-success p-2'; - badge.innerText = 'СТАТУС: РАБОТАЕТ'; - } else { - badge.className = 'badge bg-danger p-2'; - badge.innerText = 'СТАТУС: ОСТАНОВЛЕН'; - } - - logs.innerText = data.log; - logs.scrollTop = logs.scrollHeight; - } catch (e) { - badge.className = 'badge bg-warning p-2'; - badge.innerText = 'ОШИБКА API'; - } -} - document.getElementById('refreshGisStatusBtn').addEventListener('click', refreshGisStatus); -document.getElementById('refreshSudrfStatusBtn').addEventListener('click', refreshSudrfStatus); - -window.addEventListener('load', () => { - refreshGisStatus(); - refreshSudrfStatus(); -}); - +window.addEventListener('load', refreshGisStatus); // Авто-обновление раз в 30 секунд -setInterval(() => { - refreshGisStatus(); - refreshSudrfStatus(); -}, 30000); +setInterval(refreshGisStatus, 30000); {% endblock %} diff --git a/web/templates/sudrf.html b/web/templates/sudrf.html new file mode 100644 index 0000000..fc8a903 --- /dev/null +++ b/web/templates/sudrf.html @@ -0,0 +1,120 @@ +{% extends "base.html" %} + +{% block title %}Жатва ГАС Правосудие - LKM37{% endblock %} +{% block nav_sudrf %}active{% endblock %} + +{% block content %} +

Жатва ГАС Правосудие

+ +
+ +
+
+
+ ИНСТРУКЦИЯ И УПРАВЛЕНИЕ +
+
+
+

Этот модуль предназначен для автоматизированного сбора поданных обращений, заявлений и ответов судов с портала ГАС «Правосудие» (ej.sudrf.ru) для последующей склейки в PDF и загрузки в Google Drive (NotebookLM).

+ +
Шаг 1: Подготовка сессии
+

Нажмите кнопку «Запустить Жатву ГАС Правосудие» ниже. Система откроет скрытый браузер Chromium на виртуальном рабочем столе.

+ +
Шаг 2: Авторизация ЕСИА
+

Откройте VNC-браузер по ссылке справа и войдите в свой личный кабинет ГАС «Правосудие» через Госуслуги (потребуется пройти 2FA/SMS).

+ +
Шаг 3: Автоматический парсинг
+

Как только вход будет обнаружен, скрипт перехватит сессию, соберет список дел, сделает скриншоты, скачает вложения и загрузит сводные PDF на Google Drive.

+
+ +
+
+ Статус парсера: +
НЕИЗВЕСТНО
+
+ +
+
+
+
+ + +
+
+
+ СЕССИЯ И ЛОГИ СКАНИРОВАНИЯ +
+
+ + ОТКРЫТЬ VNC ЭКРАН (noVNC) + + +
+ ЛОГИ В РЕАЛЬНОМ ВРЕМЕНИ: + +
+ +

+            
+
+
+
+{% endblock %} + +{% block extra_script %} + +{% endblock %}