Seite 2 von 2 Erste 12
  1. #11
    Avatar von Manipulate
    Registriert seit
    04.12.2011
    Beiträge
    520
    Thanked 505 Times in 356 Posts

    Standard AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site

    Code:
    let isLive = document.querySelector('.twilight-main .live-indicator-container') !== null
    erzeugt eine Variable namens "isLive", welche ein boolean zurückgibt. Damit das Script mit dem Ansatz funktioniert (er achtet dann aber nicht mehr auf 5000), müsste es wie folgt angepasst werden.

    Code:
       // ==UserScript==
    // @name         Twitch String checker
    // @namespace    http://tampermonkey.net/
    // @version      0.3
    // @description  Waits for a streamer on twitch is going live, then reloads the page to gain channel points
    // @author       Manipulate
    // @match        https://www.twitch.tv/*
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=twitch.tv
    // @grant        none
    // ==/UserScript==
    (function() {
        'use strict';
    
        const timeToWait = 15; // in seconds
    
        //waits a few seconds before checking if someone is live
        //note: ready did not work, because after the DOM has finished loading, content was still added to the page
        setTimeout(() => {
            // only check if channel isn't already live when the script started (main use for reloading the page if live)
            if (document.querySelector('.twilight-main .live-indicator-container') === null) {
                checkIfLive();
            }
        }, timeToWait * 1000);
    
        function checkIfLive() {
            if (document.querySelector('.twilight-main .live-indicator-container') !== null) {
                //reload page because channel is live:
                location.reload();
            }
            console.log("Channel is not live, checking again in a few seconds");
            setTimeout(() => checkIfLive(), timeToWait * 1000);
        }
    })();
    Der refreshed nun auch die Seite, nachdem einer Live gegangen ist und hört danach auf. Hat bei meinem rudimentären Testlauf auch funktioniert. Es kann sein, dass die Seite 2x innerhalb einer Minute refreshed wird, nachdem einer live ging,- das sollte es dann aber auch gewesen sein.

  2. The Following User Says Thank You to Manipulate For This Useful Post:

    Iomega (26.11.2022)

  3. #12
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Standard AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site

    Zitat Zitat von Iomega Beitrag anzeigen
    An einer API hatte ich auch schon gedacht, nur nebenbei bei der Arbeit Programmieren lernen, ist nun auch nicht all zu geil.
    Das braucht sicher etwas mehr Zeit, wobei du auch mit 3 Jahren Vollzeit-Ausbildung/X Jahren Studium nicht plötzlich den Ritterschlag erhältst. Neben Grundlagen sind da ja auch andere Themen wie Kaufmännisches, theoretische Informatik etc. dabei. Grundsätzlich gehen tut das schon, sofern du das willst und bereit bist entsprechend Zeit dafür zu investieren. Geht allerdings etwas an diesem Thread vorbei - in dem du das bereits ein Stück weit in der Praxis machst. Mit einem Mix aus Internetrecherche, ausprobieren und in Foren nachfragen haben viele angefangen.

    Zitat Zitat von Iomega Beitrag anzeigen
    Den habe ich versucht ins Tampermonkey script einzubauen, nur der spuckt ne fehlermeldung aus.
    In beiden Codeblöcken fehlt jeweils eine schließende geschweifte Klammer: Du öffnest drei, schließt aber nur zwei wieder. Ist eventuell ein Kopierfehler, der Code macht in der Form nicht so viel Sinn. Du machst eine Schleife (for ...) durch den Array (Liste) von Manipulate, der dazu gedacht war, im gesamten Quelltext nach diesen beiden Wörtern zu suchen:

    let lookFor = ["LIVE", "5000"]

    Im Inneren machst du mit der Variable, die das aktuelle Element enthält nichts mehr, d.H. der gleiche Code wird zweimal ausgeführt. Die Schleife kann bei meiner Variante weg, da diese nicht mehr nach Zeichenketten sucht, sondern nach dem HTML-Element vom Screenshot.

    if (document.querySelector('.twilight-main .live-indicator-container') !== null) {
    alert("Found: " + isLive); // stops the page for reloading
    // do other cool stuff here
    return;
    }

    Die If-Abfrage prüft, ob das Element mit der "Live" Box nicht null ist. Diese Bedingung trifft zu, wenn die Live Box da ist, das passt. Allerdings gibst du darin die Variable isLive aus. Die gibt es nicht (alles was es nicht gibt, ist aus Sicht von JS nicht definiert und daher undefined), weil du meinen Code umgeschrieben hast. Das kann man machen, wenngleich ich zu komplexen Code nicht direkt in Bedingungen/Schleifen packen würde: Es wird schnell unübersichtlich, daher die Zwischenvariable. Wenn du das ohne Variable machen möchtest, dann darf sie nicht mehr im Code benutzt werden. Oder du definierst sie mit let isLive ... wie in meinem Beispiel.

    Fehler zu finden und darauf zu reagieren fehlt in der Tat noch, wie @Manipulate bereits angemerkt hat. Dafür würde ich nicht auf Gut Glück nach 5000 im gesamten Quelltext suchen. Du weißt nicht, wie diese Fehlermeldung technisch abgebildet wird: Steht sie tatsächlich direkt im Hauptframe des Quellcodes? Oder ist das z.B. ein Overlay von dem Player? Eventuell ist das auch irgendwie per z.B. Frame eingebettet, da gibt es diverse Möglichkeiten, warum das so möglicherweise nicht funktioniert. Selbst wenn es funktioniert, kann es leicht zu Fehlalarmen kommen. Jemand schreibt z.B. "Heutiges Ziel: 5000 Punkte in XY erreichen" in seine Beschreibung, oder jemand postet irgend einen Satz damit in den Chat. Als Folge würde die Seite in einer Endlosschleife neu geladen werden.

    Besser wäre, du analysierst den Quelltext, sobald ein solcher Fehler auftritt und grenzt das per CSS-Selektor auf Elemente/Klassen/Ids ein. Oder findest eine andere Möglichkeit, was du als Gegentest prüfen kannst, um eine funktionsfähige Seite sicherzustellen: Wenn die Person keinen Livestream am laufen hat, muss irgendwas vorhanden sein, um das zu Gewährleisten. Ist das nicht der Fall, gibt es ein Problem und du musst manuell prüfen.

    Alert-Dialoge sind übrigens keine so gute Idee, um sich was auszugeben. Vor allem nicht in Schleifen: Du bist 10 min weg, falls was schief läuft werden 600 / 15 = 40 Dialoge geöffnet... Besser console.log() oder warn/info nutzen. In der Browser-Konsole kannst du oben nach den Kategorien filtern, falls die Seite viele eigene Meldungen ausgibt. Oder du schreibst ein Präfix davor, z.B:

    console.log("[Iomegas Skript] Etwas ist passiert")


  4. The Following 2 Users Say Thank You to DMW007 For This Useful Post:

    Iomega (26.11.2022), raspberryfan (30.11.2022)

  5. #13
    Avatar von Iomega
    Registriert seit
    11.02.2013
    Beiträge
    227
    Thanked 6 Times in 6 Posts

    Standard AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site

    Zitat Zitat von Manipulate Beitrag anzeigen
    Code:
    let isLive = document.querySelector('.twilight-main .live-indicator-container') !== null
    erzeugt eine Variable namens "isLive", welche ein boolean zurückgibt. Damit das Script mit dem Ansatz funktioniert (er achtet dann aber nicht mehr auf 5000), müsste es wie folgt angepasst werden.

    Code:
       // ==UserScript==
    // @name         Twitch String checker
    // @namespace    http://tampermonkey.net/
    // @version      0.3
    // @description  Waits for a streamer on twitch is going live, then reloads the page to gain channel points
    // @author       Manipulate
    // @match        https://www.twitch.tv/*
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=twitch.tv
    // @grant        none
    // ==/UserScript==
    (function() {
        'use strict';
    
        const timeToWait = 15; // in seconds
    
        //waits a few seconds before checking if someone is live
        //note: ready did not work, because after the DOM has finished loading, content was still added to the page
        setTimeout(() => {
            // only check if channel isn't already live when the script started (main use for reloading the page if live)
            if (document.querySelector('.twilight-main .live-indicator-container') === null) {
                checkIfLive();
            }
        }, timeToWait * 1000);
    
        function checkIfLive() {
            if (document.querySelector('.twilight-main .live-indicator-container') !== null) {
                //reload page because channel is live:
                location.reload();
            }
            console.log("Channel is not live, checking again in a few seconds");
            setTimeout(() => checkIfLive(), timeToWait * 1000);
        }
    })();
    Der refreshed nun auch die Seite, nachdem einer Live gegangen ist und hört danach auf. Hat bei meinem rudimentären Testlauf auch funktioniert. Es kann sein, dass die Seite 2x innerhalb einer Minute refreshed wird, nachdem einer live ging,- das sollte es dann aber auch gewesen sein.
    Erstmal Danke dir .
    Aktuell teste ich das Script und bisher funktioniert alles anscheinend. Daher Tausend Dank
    Auch der Fehler "5000" erscheint bisher nicht mehr. Wobei ich da auch hoffe, das es nicht mehr passiert. So wie DMW sagt, sind die HTML Elemente ja nur da, wenn der Channel Live ist, heißt: er findet die egal ob der Fehler da ist oder ob nicht.
    Somit sollte es nicht mehr vorkommen. Hoffe ich zumindest, drücke da die Daumen .
    Ginge das auch, das er nach einem reload, zusätzlich nochmal extra in der Console ausgibt, das alles funktioniert hat?
    So weiß ich wenigstens immer das alles funzt. (man sieht oft nämlich nix mehr in der Console und so kann ich dann schauen ob dort ein eintrag ist mit zb: Channel ist Live, Reload war erfolgreich. Oder whatever)



    Zitat Zitat von DMW007 Beitrag anzeigen
    Das braucht sicher etwas mehr Zeit, wobei du auch mit 3 Jahren Vollzeit-Ausbildung/X Jahren Studium nicht plötzlich den Ritterschlag erhältst. Neben Grundlagen sind da ja auch andere Themen wie Kaufmännisches, theoretische Informatik etc. dabei. Grundsätzlich gehen tut das schon, sofern du das willst und bereit bist entsprechend Zeit dafür zu investieren. Geht allerdings etwas an diesem Thread vorbei - in dem du das bereits ein Stück weit in der Praxis machst. Mit einem Mix aus Internetrecherche, ausprobieren und in Foren nachfragen haben viele angefangen.



    In beiden Codeblöcken fehlt jeweils eine schließende geschweifte Klammer: Du öffnest drei, schließt aber nur zwei wieder. Ist eventuell ein Kopierfehler, der Code macht in der Form nicht so viel Sinn. Du machst eine Schleife (for ...) durch den Array (Liste) von Manipulate, der dazu gedacht war, im gesamten Quelltext nach diesen beiden Wörtern zu suchen:

    let lookFor = ["LIVE", "5000"]

    Im Inneren machst du mit der Variable, die das aktuelle Element enthält nichts mehr, d.H. der gleiche Code wird zweimal ausgeführt. Die Schleife kann bei meiner Variante weg, da diese nicht mehr nach Zeichenketten sucht, sondern nach dem HTML-Element vom Screenshot.

    if (document.querySelector('.twilight-main .live-indicator-container') !== null) {
    alert("Found: " + isLive); // stops the page for reloading
    // do other cool stuff here
    return;
    }

    Die If-Abfrage prüft, ob das Element mit der "Live" Box nicht null ist. Diese Bedingung trifft zu, wenn die Live Box da ist, das passt. Allerdings gibst du darin die Variable isLive aus. Die gibt es nicht (alles was es nicht gibt, ist aus Sicht von JS nicht definiert und daher undefined), weil du meinen Code umgeschrieben hast. Das kann man machen, wenngleich ich zu komplexen Code nicht direkt in Bedingungen/Schleifen packen würde: Es wird schnell unübersichtlich, daher die Zwischenvariable. Wenn du das ohne Variable machen möchtest, dann darf sie nicht mehr im Code benutzt werden. Oder du definierst sie mit let isLive ... wie in meinem Beispiel.

    Fehler zu finden und darauf zu reagieren fehlt in der Tat noch, wie @Manipulate bereits angemerkt hat. Dafür würde ich nicht auf Gut Glück nach 5000 im gesamten Quelltext suchen. Du weißt nicht, wie diese Fehlermeldung technisch abgebildet wird: Steht sie tatsächlich direkt im Hauptframe des Quellcodes? Oder ist das z.B. ein Overlay von dem Player? Eventuell ist das auch irgendwie per z.B. Frame eingebettet, da gibt es diverse Möglichkeiten, warum das so möglicherweise nicht funktioniert. Selbst wenn es funktioniert, kann es leicht zu Fehlalarmen kommen. Jemand schreibt z.B. "Heutiges Ziel: 5000 Punkte in XY erreichen" in seine Beschreibung, oder jemand postet irgend einen Satz damit in den Chat. Als Folge würde die Seite in einer Endlosschleife neu geladen werden.

    Besser wäre, du analysierst den Quelltext, sobald ein solcher Fehler auftritt und grenzt das per CSS-Selektor auf Elemente/Klassen/Ids ein. Oder findest eine andere Möglichkeit, was du als Gegentest prüfen kannst, um eine funktionsfähige Seite sicherzustellen: Wenn die Person keinen Livestream am laufen hat, muss irgendwas vorhanden sein, um das zu Gewährleisten. Ist das nicht der Fall, gibt es ein Problem und du musst manuell prüfen.

    Alert-Dialoge sind übrigens keine so gute Idee, um sich was auszugeben. Vor allem nicht in Schleifen: Du bist 10 min weg, falls was schief läuft werden 600 / 15 = 40 Dialoge geöffnet... Besser console.log() oder warn/info nutzen. In der Browser-Konsole kannst du oben nach den Kategorien filtern, falls die Seite viele eigene Meldungen ausgibt. Oder du schreibst ein Präfix davor, z.B:

    console.log("[Iomegas Skript] Etwas ist passiert")
    Dankeschön, naja bei vllt 1 Std am Tag die ich nach der Arbeit noch lebe und zeit hätte und danach umfalle, werde ich wohl 6 Jahre brauchen xD.
    Aber mal schauen, muss wohl irgendwie nach Lernmaterial schauen. Denn ich kann schlecht um fast 2 Uhr nachts wo ich Home komme, schlecht zu Schule xD. Nur das was man findet ist immer sehr teuer, oder nicht das wahre.. Hoffe aber das sich da vllt was machen lässt .

    Ja das mit LIVE und 5000 ist so eine Sache, aktuell kommt es nicht mehr vor und ich hoffe es bleibt dank dem Script auch so, aber wenn doch, müsste es leider nochmal geändert werden.
    Ich hoffe aber nicht.. mal schauen .
    Und so wie du sagtest, hast du vollkommen recht, wenn man dann selber zb 5000 Punkte hat oder irgendjemand 5000K schreibt, bei all solchen Sachen könnte es zu Problemen kommen.
    Daher denke ich das die aktuelle Lösung von dir wohl die beste ist, mit den HTML Elementen, die nur erscheinen wenn der Channel Live ist

    Richtig, die Alert box war auch etwas blöd, musste die ständig bestätigen und wenn dann noch die Dialoge geöffnet werden, muss nicht sein.
    Mit der Console bin ich ja genauso zufrieden und solange es das tut was es soll, bin ich ja genauso zufrieden .
    Kam nicht mal auf die Idee, aber daher gibt es ja zum Glück Leute die sich damit auskennen.
    Daher auch vielen vielen Dank dir und der Hilfe mit den Elementen etc. .
    Geändert von Iomega (27.11.2022 um 12:11 Uhr)

Seite 2 von 2 Erste 12

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 25.04.2018, 19:13
  2. Antworten: 1
    Letzter Beitrag: 29.12.2013, 14:31
  3. Antworten: 2
    Letzter Beitrag: 29.09.2012, 15:24
  4. Hacker-Angriff auf "World of WarCraft" und "Diablo 3"!
    Von Waterpolo im Forum Gaming-News
    Antworten: 3
    Letzter Beitrag: 10.08.2012, 23:35
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.