Bu konu bir çözümü açıklamaktadır. Herhangi bir çözüm açıklanmadığını düşünüyorsanız konuyu rapor edebilirsiniz.

Tantalis 13

Başarılı
Katılım
16 Mayıs 2024
Mesajlar
54
Beğeniler
39
Bu kod ne kadar kullanıcıya hitap eder bilmiyorum ama modemde sinir olduğum bir durumdu elle yazmak. Zyxel EX3501-T1 modemde denedim ve sorun çözüldü. Normalde güvenlik amaçlı modemde tarayıcıdan otomatik id ve şifre girme olmuyormuş. Ancak aşağıdaki yöntemle bir makro gibi çalışmasını sağlayarak otomatik giriş yapabilirsiniz modem arayüzüne.

İlk olarak aşağıdaki eklentiyi tarayıcıya kurmamız gerekiyor:


Daha sonra da aşağıdaki kodu eklenti ayarlarından Create script > Create user script diyerek yapıştırıp kaydedebilirsiniz:

Not: "Koddaki kullanıcı adı" ve "şifreniz" alanlarını kendinize göre düzenleyiniz.


Kod:
// ==UserScript==
// @name         Zyxel Oto Giriş
// @namespace    Deneme
// @version      1.1
// @description  Zyxel arayüzüne klavyeden yazıyormuş gibi giriş yapar ve Giriş Yap'a basar.
// @match        http://192.168.1.1/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const USERNAME = "kullanıcıadı"; // Buraya kullanıcı adını yaz
    const PASSWORD = "şifreniz"; // Buraya şifreni yaz

    // JavaScript framework'ünün inputları DOM'a basmasını bekle
    function waitForElement(selector, callback) {
        const interval = setInterval(() => {
            const el = document.querySelector(selector);
            if (el && el.offsetParent !== null) { // Elementin görünür olduğundan emin ol
                clearInterval(interval);
                callback(el);
            }
        }, 500);
    }

    // İnsan gibi harf harf yazma simülasyonu
    function simulateHumanTyping(element, text, callback) {
        element.focus();
        let i = 0;
      
        const typingInterval = setInterval(() => {
            // Değeri harf harf artır
            element.value = text.substring(0, i + 1);

            // Vue/React gibi frameworklerin değişikliği algılaması için "input" ve "change" eventlerini fırlat
            element.dispatchEvent(new Event('input', { bubbles: true }));
            element.dispatchEvent(new Event('change', { bubbles: true }));

            i++;
            if (i >= text.length) {
                clearInterval(typingInterval);
                element.blur();
                if(callback) setTimeout(callback, 300); // Yazma bitince 300ms bekle (insani gecikme)
            }
        }, 80); // Her harf arası 80ms bekle
    }

    // Giriş butonuna basma işlemi
    function clickLoginButton() {
        // Sayfadaki tüm span elementlerini tarayıp "Giriş Yap" yazanı buluyoruz
        const spans = document.querySelectorAll('span');
        let loginSpan = null;
      
        for (let span of spans) {
            if (span.textContent.trim() === 'Giriş Yap') {
                loginSpan = span;
                break;
            }
        }

        if (loginSpan) {
            // Tıklamayı hem span'a hem de en yakın tıklanabilir kapsayıcıya gönderiyoruz
            const clickableElement = loginSpan.closest('button') || loginSpan.closest('a') || loginSpan;
          
            clickableElement.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, cancelable: true }));
            clickableElement.dispatchEvent(new MouseEvent('mouseup', { bubbles: true, cancelable: true }));
            clickableElement.click();
          
        } else {
            console.log("Giriş Yap yazan span bulunamadı.");
        }
    }

    window.addEventListener('load', () => {
        // DOM sonradan yükleniyor, şifre alanını bekliyoruz
        waitForElement('input[type="password"]', (passwordInput) => {
          
            // Kullanıcı adı alanını bul
            const usernameInput = document.querySelector('input[type="text"]') || document.querySelector('input[name="username"]');

            if (usernameInput && usernameInput.value !== USERNAME) {
                // Önce kullanıcı adını yaz, sonra şifreyi yaz, sonra tıkla
                simulateHumanTyping(usernameInput, USERNAME, () => {
                    simulateHumanTyping(passwordInput, PASSWORD, clickLoginButton);
                });
            } else {
                // Sadece şifre alanı varsa
                simulateHumanTyping(passwordInput, PASSWORD, clickLoginButton);
            }
        });
    });

})();
 
Son düzenleyen: Moderatör: