// ==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);
})();