Загрузка данных


// ==UserScript==
// @name         Local AutoLogin & Redirect to Channels
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Автологин и переход на /view_channels
// @match        http://192.168.1.100/*
// @grant        none
// @run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    // === НАСТРОЙКИ (замени на свои данные) ===
    const LOGIN = 'admin';
    const PASSWORD = 'your_password';
    const TARGET_PATH = '/view_channels';

    // Селекторы ищут стандартные поля. Если на сайте специфичные классы/id, укажи их здесь:
    const USER_SELECTOR = 'input[name="username"], input[name="login"], input[name="user"], input[type="text"]';
    const PASS_SELECTOR = 'input[type="password"]';
    const BTN_SELECTOR  = 'button[type="submit"], input[type="submit"], button.login-btn, .btn-primary, button';

    // Функция правильной вставки текста (обходит защиту React/Vue/Angular)
    function setNativeValue(element, value) {
        const valueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set;
        valueSetter.call(element, value);
        element.dispatchEvent(new Event('input', { bubbles: true }));
        element.dispatchEvent(new Event('change', { bubbles: true }));
    }

    let loginAttempted = false;

    // Проверяем страницу каждые 500 мс (на случай долгой подгрузки скриптов сайта)
    const timer = setInterval(() => {
        const passField = document.querySelector(PASS_SELECTOR);
        const userField = document.querySelector(USER_SELECTOR);

        // 1. Если на странице есть поля логина и пароля — выполняем вход
        if (passField && userField && !loginAttempted) {
            loginAttempted = true;

            setNativeValue(userField, LOGIN);
            setNativeValue(passField, PASSWORD);

            setTimeout(() => {
                const submitBtn = document.querySelector(BTN_SELECTOR);
                if (submitBtn) {
                    submitBtn.click();
                } else {
                    // Если кнопки нет, пробуем отправить саму форму или нажать Enter
                    const form = passField.closest('form');
                    if (form) form.submit();
                }
            }, 300);
        }

        // 2. Если поля пароля на странице больше нет (мы уже авторизованы)
        // и мы ещё не на вкладке /view_channels — переходим на неё
        if (!passField && !window.location.pathname.includes(TARGET_PATH)) {
            // Даём 500 мс на сохранение токена/куки после логина и делаем редирект
            setTimeout(() => {
                if (!document.querySelector(PASS_SELECTOR) && !window.location.pathname.includes(TARGET_PATH)) {
                    clearInterval(timer);
                    window.location.href = window.location.origin + TARGET_PATH;
                }
            }, 500);
        }

        // 3. Если мы уже на /view_channels и авторизованы — останавливаем таймер
        if (!passField && window.location.pathname.includes(TARGET_PATH)) {
            clearInterval(timer);
        }
    }, 500);
})();