ING DiBa Login keepAlive

try to keep login alive... Das Script setzt die "Automatische LogOut-Funktion" der ING (ehem. DiBa) Banking Site außer Kraft. Die Seite bleibt so lange online, bis man sich selber abmeldet. Die Watchlist aktualisiert ohne Unterbrechung (Kursaktualisierung muss nicht mehr manuell angestoßen werden). Hauseigene Werbung wird ebenfalls versucht auszublenden (Angebote, Kredite etc.)

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği yüklemek için Tampermonkey gibi bir uzantı yüklemeniz gerekir.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği indirebilmeniz için ayrıca Tampermonkey gibi bir eklenti kurmanız gerekmektedir.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

Bu stili yüklemek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için Stylus gibi bir uzantı kurmanız gerekir.

Bu stili yükleyebilmek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı kurmanız gerekir.

Bu stili yükleyebilmek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==UserScript==
// @name         ING DiBa Login keepAlive
// @namespace    https://*.ing-diba.*
// @version      0.8.3
// @description  try to keep login alive... Das Script setzt die "Automatische LogOut-Funktion" der ING (ehem. DiBa) Banking Site außer Kraft. Die Seite bleibt so lange online, bis man sich selber abmeldet. Die Watchlist aktualisiert ohne Unterbrechung (Kursaktualisierung muss nicht mehr manuell angestoßen werden). Hauseigene Werbung wird ebenfalls versucht auszublenden (Angebote, Kredite etc.)
// @author       Chillchef
// @include      https://wertpapiere.ing.*
// @include      https://banking.ing.*
// @XincludeX    *://*.ing.*/*
// @grantX       none
// @license      MIT
/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_setClipboard
// @grant        unsafeWindow
// @grant        window.close
// @grant        window.focus
// @grant        window.onurlchange
// @run-at       document-idle
*/
// ==/UserScript==

(function() {
    'use strict';
    //initEvents();

    if(window.debugOutput !== undefined)
    {
        window.debugOutput = true;
    }
    //setTimeout(function(){restoreConsole();},400);
    log("ING KeepAlive Script start:");
    log(document.location);

    var cnt = 0;
    var hBckup = new Object();
    var d = document;
    var t = 100000;
    setTimeout(function(){refreshLogin();},t);
    setTimeout(function(){refreshPopup();},t);


    var classesToHide = new Object();
    classesToHide[0] = ["ghost-account","0"];
    classesToHide[1] = ["hint sales-signals sales-signals--wide gap-top-2-lg sales-signals__teaser","0"];
    classesToHide[2] = ["hint sales-signals sales-signals--wide","0"];
    classesToHide[3] = ["modal modal--open","0"];
    classesToHide[4] = ["hint sales-signals sales-signals--wide","0"];
    classesToHide[5] = ["hint sales-signals","0"];
    classesToHide[6] = ["insight insight--ghost","0"];
    classesToHide[7] = ["insight insight--teaser","0"];
    classesToHide[8] = ["insight-modal","0"];
    classesToHide[9] = ["u-print-hidden","2"];
    classesToHide[10] = ["insight insight--slider","0"];
    classesToHide[11] = ["insight","0"];
    classesToHide[12] = ["insight insight--elevated","0"];
    classesToHide[13] = ["announcement","0"];
    classesToHide[14] = ["sh-title-arrow-box","0"];
    //classesToHide[15] = ["xxx","0"];
    //classesToHide[16] = ["xxx","0"];
    //classesToHide[17] = ["xxx","0"];
    //classesToHide[18] = ["xxx","0"];
    //classesToHide[19] = ["xxx","0"];
    //classesToHide[20] = ["xxx","0"];

    //window.addEventListener('DOMContentLoaded', sorryBro());
    //window.addEventListener('DOMContentLoaded', styleStart());
    window.addEventListener('DOMContentLoaded', TimerStart());


    function TimerStart()
    {
        setTimeout(function(){styleStart();},500);
        setTimeout(function(){sorryBro();},500);
    }


    function log(txt)
    {
        var dt = new Date();
        console.log(dt.toLocaleString()+ "." + dt.getMilliseconds() + " " + txt);
    }

    function initEvents()
    {
        log("initEvents()");

        //test1
        document.onreadystatechange = function(){
            if(document.readyState == "complete")
            {
                log("Test1: document.onreadystatechange == \"complete\"");
            }

            if(document.readyState == "interactive")
            {
                log("Test1: document.onreadystatechange == \"interactive\"");
            }
        }

        //test2
        window.addEventListener('load', function(){log("Test2: window.addEventListener load");});

        //test3
        document.addEventListener('DOMContentLoaded', function(){log("Test3: document.addEventListener DOMContentLoaded");});

    }


    function styleStart()
    {
        cnt++;
        log("styleStart() Nr." + cnt);
        editStyle("sh-page ing-diba-content-to-blur","95%");
        editStyle("content","95%");
        editStyle("isin","95%");

        btnColor();

        //Werbeeinblendungen ausblenden. Falls nicht gewünscht, einfach auskommentieren oder auf 'false' setzen!
        hideClasses(true);

        selectHandelsPlatz();


        //watchListFullNames();
    }

    function btnColor()
    {
        log("btnColor() start");
        try
        {

            var loBtn = d.getElementsByClassName("ing-sn-session-button__link")[0].nextElementSibling;
            loBtn.innerText = "Kein Auto-Logout!";

        }
        catch
        {
        }
        //d.getElementsByClassName("session")[0].style.cssText = ":hover {color: red !important; background-color: green !important;}";
        d = document;
        var c = "rgb(255, 197, 161)";
        var ho = [
            ["session","rgb(255, 98, 50)"], //rgb(255, 98, 0)
            ["ing-header",c],
            ["ing-sn-content-to-blur",c],
            ["ing-header__bottom",c],
            ["navigation-l1",c],
            ["ingde-sn-search-input","rgb(255, 222, 201)"],
            ["ing-sn-session-button__refresh","rgb(191, 73, 0)"]
        ];

        var b;
        for(var s in ho)
        {
            try
            {
                b = document.getElementsByClassName(ho[s][0]);
                b[0].style["background-color"] = ho[s][1];
                window.console.log("btnColor("+ho[s][0]+") OK");
            }
            catch(e)
            {
                window.console.log("btnColor("+ho[s][0]+") Fehler: " + e.message);
                window.console.log(b);
            }
        }
        //setTimeout(function(){btnColor();},10000);
    }

    function isWatchlist()
    {
        try
        {
            //return window.location.toString().includes("wertpapiere");
            return document.getElementsByClassName("sh-title")[0].innerText.toLowerCase().includes("watchlist");
        }
        catch
        {
            return false;
        }
    }

    function selectHandelsPlatz()
    {
        try
        {
            log("selectHandelsPlatz()");
            var tradeMask = d.getElementsByClassName("ibbr-table-cell");

            for(var x in tradeMask)
            {
                try
                {
                    if(tradeMask[x].innerHTML.toLowerCase().includes("direkthandel"))
                    {
                        log("direkthandel klick");
                        tradeMask[x].click()
                        setTimeout(function(){selectTradeOptions();},1000);
                        break;
                    }
                }
                catch
                {
                }
            }
        }
        catch
        {
        }
    }

    function selectTradeOptions()
    {
        var coboItems = d.getElementsByTagName("option");
        console.log(coboItems);
        for(var x in coboItems)
        {
            try
            {

                /*
                if(coboItems[x].getAttribute("value") === "LIMIT")
                {
                    coboItems[x].parentNode[0].click();
                    coboItems[x].selected = true;
                    //coboItems[x].setAttribute("selected","selected");
                    //coboItems[x].click();
                    console.log("Eintrag Aktiviert:");
                    console.log(coboItems[x]);
                }
                */

                if(coboItems[x].getAttribute("value") === "MAXIMAL")
                {
                    //coboItems[x].parentNode[0].click();
                    coboItems[x].selected = true;
                    //coboItems[x].setAttribute("selected","selected");
                    //coboItems[x].click();
                    console.log("Eintrag Aktiviert:");
                    console.log(coboItems[x]);
                }
            }
            catch
            {
            }
        }
    }

    function refreshLogin()
    {
        if(isWatchlist())
        {
            return;
        }

        try
        {
            //var clsn = "session__refresh"; //alt1
            //var clsn = "ing-sn-session-button__refresh"; //alt2
            //
            var clsn = "session-button__refresh-button";

            var reloadBtn = d.getElementsByClassName(clsn);
            if(reloadBtn[0])
            {
                reloadBtn[0].click();
                log(" Login-Refresh");
            }
        }
        catch(e)
        {
            //window.alert("DiBa-Script-Refresh-Fehler: " + e.message);
            log("Fehler in refreshLogin(): " + e.message + " !!!");
            console.log(e);
        }
        setTimeout(function(){refreshLogin();},t);
    }

    function refreshPopup()
    {
        try
        {
            var pId = "QuotestreamPopup";
            var p = d.getElementById(pId);
            if(p !== null)
            {
                var ph = p.clientHeight;
                if(ph > 0)
                {
                    d.getElementById("ctl00_QsPopup_Reload").click();
                    log("refreshPopup()  Watchlist Aktualisierung OK");
                }
            }
        }
        catch(e)
        {
            //window.alert("DiBa-Script-Popup-Fehler: " + e.message);
            log("Fehler in refreshPopup(): " + e.message + " !!!");
            console.log(e);
        }

        setTimeout(function(){refreshPopup();},2000);
    }

    //Falls Serverfehler "Entschuldigung!" beim LoginRefresh:
    function sorryBro()
    {
        try
        {
            var s = d.getElementsByClassName("headline")[0];
            if(s !== undefined)
            {
                log("sorryBro() Fehlersite wurde geladen.");
                console.log("innerText: '" + s.innerText + "'");
                if(s.innerText == "Entschuldigung!")
                {
                    log("sorryBro():Entschuldigung! Gehe zurück zur vorherigen Site.");
                    history.back();
                }
                else
                {
                    log("sorryBro() Fehlersite unbekannt? ");
                }
            }
        }
        catch(e)
        {
            log("sorryBro() Fehler: " + e.message);
        }
    }

    function hideClasses(hide)
    {
        for(var v in classesToHide)
        {
            hideClass(classesToHide[v][0], classesToHide[v][1], hide);
        }
    }

    function hideClass(clsName, cnt, hide)
    {
        var cnter = -1;
        var isId = false;

        try
        {
            var sichtbarkeit = hide ? 'hidden' : 'visible';
            var ga = document.getElementsByClassName(clsName);
            


            if(ga === null || ga.length === 0)
            {
                var e = d.getElementById(clsName);
                ga = new Array();
                ga[0] = e;
                isId = true;
            }
            else
            {
                isId = false;
            }



            if(ga !== null)
            {
                for(var v in ga)
                {
                    if(ga[v] !== null)
                    {
                        cnter++;
                        if(cnter < cnt || ga[v].localName === "form")
                        {
                            continue;
                        }

                        if((!isId && ga[v].className === clsName) || (isId && ga[v].id !== undefined && ga[v].id === clsName))
                        {
                            /*
                            cnter++;
                            if(cnter < cnt)
                            {
                                continue;
                            }
                            */

                            ga[v].style.visibility = sichtbarkeit;
                            if(hide === true)
                            {
                                if (hBckup[ga[v].id] === undefined) { hBckup[ga[v].id] = ga[v].style.height;}
                                ga[v].style.height = '0px';
                            }
                            else
                            {
                                if (hBckup[ga[v].id] !== undefined) { ga[v].style.height = hBckup[ga[v].id]}
                            }

                            log(">>> hideClass: " + clsName + "[idx " + cnter + "] versteckt: " + hide);
                            console.log(ga);
                        }

                    }
                }
            }
            else
            {
                log(">>> hideClass: " + clsName + "[idx " + cnter + "]  ist NULL");
            }
        }
        catch(e)
        {
            window.alert("DiBa-Script-Hide-Class-Fehler: " + clsName + ": " + e.message);
            window.console.log("Fehler: " + e.message + " !!!");
            console.log(e);
        }
    }

    function editStyle(clsName, clsWidth)
    {
        try
        {
            var c;
            c = d.getElementsByClassName(clsName);
            if(c === null || c.length == 0)
            {
                c = d.getElementById(clsName);
            }

            if(c !== null && c.length > 0)
            {
                for(var v in c)
                {
                    try
                    {
                        c[v].style["max-width"] = clsWidth;
                        c[v].children[1].style.maxWidth = clsWidth;
                        log("editStyle(): " + clsName + " auf " + clsWidth + " gesetzt");
                    }
                    catch(ex)
                    {
                    }
                }
            }
        }
        catch(e)
        {
            window.alert("DiBa-Script-editStyle-Fehler: " + clsName + ": " + e.message);
            window.console.log("Fehler: " + e.message + " !!!");
            console.log(e);
        }
    }

    var f;
    function createFrame(url, id)
    {
        try
        {
            f = document.createElement('iframe');
            f.src = url;
            document.body.appendChild(f)
            f.setAttribute("id",id);


            return document.getElementById(id).contentDocument.getElementsByClassName("headline instrument-name")[0].innerHTML;
        }
        catch(e)
        {
            return id;
        }
    }

    function watchListFullNames()
    {
        var t = d.getElementById("ctl00_WebPartManager_wp1597137417_wp45466993_PortfolioItems_Control_Grid").childNodes[2].rows;
        for(var r in t)
        {
            console.log(t[r]);
            if(t[r].className === "first")
            {
                try
                {
                    var id = t[r].cells[0].textContent;
                    var url = t[r].cells[0].childNodes[0].getAttribute("href");

                    t[r].cells[0].textContent = createFrame(url, id);
                }
                catch(e)
                {
                    console.log(e);
                }
            }
        }
    }


    function restoreConsole()
    {
        var i = document.createElement('iframe');
        i.style.display = 'none';
        document.body.appendChild(i);
        window.console = i.contentWindow.console;
        i.parentNode.removeChild(i);
    }
})();