Seite 2 von 2 Erste 12
  1. #11
    Avatar von Manipulate
    Registriert seit
    04.12.2011
    Beiträge
    518
    Thanked 500 Times in 354 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 (Gestern)

  3. #12
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    5.213
    Thanked 8.981 Times in 2.886 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 User Says Thank You to DMW007 For This Useful Post:

    Iomega (Gestern)

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.