DMW007 (22.11.2022)
-
20.11.2022, 23:45 #1
Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Hallöchen zusammen,
ich bräuchte mal Hilfe.
Ich suche derzeit ein Script für die Webseite Twitch.
Es gibt ähnliches, aber nicht genau das was ich suche.
Funktion:
Seitenabfrage (Intervall 15 Sec.) zb als XHR-Aktualisierung oder oder oder..
Diese soll nach meinen gewünschten Text (Wort) suchen..
Wenn gefunden, soll er die Seite einmal neu laden und mich zuvor per Push benachrichtigen und stoppen..
Warum?
Ich habe oft mehrere Channel in mehreren Fenstern und Tabs im Hintergrund laufen und dies auch sehr lange, wodurch ich manchmal einen Fehlercode "Dieses Video ist nicht verfügbar. (Fehler #5000)" erhalte. Daher möchte ich 2 Wörter abfragen, "LIVE" und "5000" und wenn eines gefunden wird, das er dann die Seite neu lädt und dann stoppt.
Beispiel.
Ich gehe auf Seite Twitch zu einem Channel.
Dieser ist offline.
Ich aktiviere das Script und Gebe das Wort LIVE und 5000 ein.
Nun fragt das script alle 15sec im Background ab, ob der Text gefunden wurde. (Manuelle Zeit Eingabe wäre natürlich auch Super.)
Sobald die Person Online geht, erscheint das Wort LIVE, entsprechend müsste das Script dann die Seite neu Laden und am besten mich dann Zuvor per Push benachrichtigen und dann stoppen.
Ich hoffe mir kann da jemand mit helfen
Vielen Dank
**Ich bin mit Tampermonkey leider nur soweit gekommen, allerdings funktioniert das nicht wirklich und die funktionen fehlen auch halbwegs.. Wer daher bessere Lösungen hat, dem wäre ich sehr dankbar. Und nein, es muss nicht über Tampermonkey laufen, ganz nach euren wünschen **
Code:(function() { 'use strict'; $(document).ready(function() { var LookFor = "LIVE"; // Change this to find a different string if($('body:contains("' + LookFor + '")').length > 0) { alert("Found: " + LookFor); } else { location.reload(); } }); })();
-
The Following User Says Thank You to Iomega For This Useful Post:
-
22.11.2022, 20:01 #2
AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Ich habe das Script ein wenig angepasst, jQuery entfernt und kurz getestet. Bei mir hat es funktioniert. (Getestet bei einem Twitch User, welcher momentan live ist, und bei einem der es nicht ist).
Wenn nichts gefunden wird, wird automatisch die Seite auch aktualisiert und neu gesucht.
Code:// ==UserScript== // @name Twitch String checker // @namespace http://tampermonkey.net/ // @version 0.1 // @description Checks for given strings, if not found, reloads the page after a given amount of time. // @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'; let timeToWait = 15; // in seconds let lookFor = ["LIVE", "5000"]; // Change this to find different strings ready(() => { for (let stringToSearch of lookFor) { if (document.body.innerHTML.search(stringToSearch) > 0) { alert("Found: " + stringToSearch); // do other cool stuff here break; // to stop searching after the first word was found } else { setTimeout(() => location.reload(), timeToWait * 1000); } }; }); // gotten from stackoverflow function ready(fn) { if (typeof fn !== 'function') { throw new Error('Argument passed to ready should be a function'); } if (document.readyState != 'loading') { fn(); } else if (document.addEventListener) { document.addEventListener('DOMContentLoaded', fn, { once: true // A boolean value indicating that the listener should be invoked at most once after being added. If true, the listener would be automatically removed when invoked. }); } else { document.attachEvent('onreadystatechange', function() { if (document.readyState != 'loading') fn(); }); } } })();
-
The Following 3 Users Say Thank You to Manipulate For This Useful Post:
DMW007 (22.11.2022), Iomega (23.11.2022), raspberryfan (30.11.2022)
-
23.11.2022, 15:06 #3
AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Erst einmal vielen vielen Dank für deine Mühe und Zeit.
Hab das in 9 Foren und nur hier wird geantwortet, dafür bin ich dir echt dankbar .
Kleine Anliegen hätte ich aber noch.
Das Script lädt ja dauerhaft alle 15 sec. die Seite neu. Ginge das auch Ohne?
Weil bei mehreren Fenstern mit Tabs im Hintergrund geht das auf den PC und den Browser und wie im Beispiel beschrieben wäre es deswegen schonender wenn er dauerhaft nur schaut ob der Stream "LIVE" oder "5000" zu sehen ist und falls ja, er dann mit 15 sec Verzögerung die Seite einmal neu lädt. (Heißt, if String found reload.)
Aktuell lädt er ja alle 15 sec die Seite neu und gibt die Meldung schon vorzeitig aus und leider nicht mehr 1x nach dem Live gehen.
Das andere wäre: Ginge eine Chrome Notification? Weil die am Desktop angezeigt werden kann.
Mein Test verlief so:
Tampermonkey Script eingefügt.
Aktiviert und bin auf mein eigenen Channel zum Testen
Bei mir selber funktioniert es nicht, warum auch immer.
Ich habe es an, er lädt die Seite auch neu, nur wenn ich nach 1-2 Reloads live gehe, passiert nix.
Bei anderen die schon live sind, gibt er die Meldung im Alert aus, allerdings so schnell das nicht mal die Seite geladen ist .
Ist das nur bei mir so ?
Danke vielmals für die Hilfe
-
24.11.2022, 01:56 #4
AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Moin,
dann habe ich wohl deinen Anfangspost ein bisschen missverstanden. Der aktualisierte Code wäre folgender:
Code:// ==UserScript== // @name Twitch String checker // @namespace http://tampermonkey.net/ // @version 0.2 // @description Checks for given strings, if not found, reloads the page after a given amount of time. // @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 const lookFor = ["LIVE", "5000"]; // Change this to find different strings ready(checkForString); function checkForString() { for (let stringToSearch of lookFor) { if (document.body.innerHTML.search(stringToSearch) > 0) { alert("Found: " + stringToSearch); // stops the page for reloading // do other cool stuff here return; } } console.log("String(s) not found, trying again in a few seconds"); setTimeout(() => checkForString(), timeToWait * 1000); } // gotten from stackoverflow function ready(fn) { if (typeof fn !== 'function') { throw new Error('Argument passed to ready should be a function'); } if (document.readyState != 'loading') { fn(); } else if (document.addEventListener) { document.addEventListener('DOMContentLoaded', fn, { once: true // A boolean value indicating that the listener should be invoked at most once after being added. If true, the listener would be automatically removed when invoked. }); } else { document.attachEvent('onreadystatechange', function() { if (document.readyState != 'loading') fn(); }); } } })();
Aber es gibt in Twitch, wenn du in die Einstellungen gehst, dann oben auf Benachrichtigungen klickst und dann noch unter "Auf Twitch" folgendes:
Das klingt doch sehr nach deinem Use-Case. Hast du das bereits ausprobiert oder gibt es dabei Probleme?
-
The Following 2 Users Say Thank You to Manipulate For This Useful Post:
Iomega (24.11.2022), raspberryfan (30.11.2022)
-
24.11.2022, 03:29 #5
AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Erstmal wieder ein Dankeschön für deine Arbeit, Mühe und dein Durchhaltevermögen .
Das mit den Twitch Benachrichtigungen habe ich angestellt, mal schauen wie es funzt .
Dein neuen Code, habe ich nun drinne, allerdings findet der nun in offline channels LIVE, wie auch immer das passieren kann o.o?
Blöde frage, nur ich habe mit einem auto reloader heraus gefunden das die Live Änderung immer in 1 von den 3 body´s steckt.
Kannst du damit etwas anfangen?
Weil ich nicht weiß warum der im Offline Channel trotzdem Live findet. Wobei er danach auch nichts mehr tut.
Daher is das hier hilfreich? (es gibt 3, weil es mal div:nth-of-type(3) , mal div:nth-of-type(4) und mal div:nth-of-type(5) is (relativ am ende stehen die))
Code:1: body > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(2) > main:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(3) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(3) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) oder 2. body > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(2) > main:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(3) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(4) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) oder 3. body > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(2) > main:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(3) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(5) > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1)
EDIT:
Also es geht, aber sobald er LIVE gefunden hat, passiert nach 15 Sekunden kein reload (egal ob Tab aktiv auf habe oder im Hintergrund ist).
Heißt: Das Live ding funzt super, es fehlt nur: Das wenn er das gefunden hat, wartet er 15 sekunden und lädt dann 1x den Tab neu.
Und mit der Benachrichtigung ist es so eine Sache, da die Fenster und Tabs im Hintergrund sind, passiert da nicht viel.
Ein blauer kleiner punkt erscheint, aber ich kriege das ja nicht mit, kein Sound kein nix.
Wenn wir die 2. Kleinen Mäkel noch ausbessern könnten. Wäre ich mehr als Glücklich und mehr als DankbarGeändert von Iomega (24.11.2022 um 03:45 Uhr)
-
24.11.2022, 19:56 #6
AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Die Frage ist: Möchtest du unbedingt, dass er auf den Text "String" schaut, oder kann das Script viel expliziter sein?
Wenn jemand offline ist und jemanden vorschlägt, der momentan live ist, findet er dann auch im gesamten HTML das Wort "LIVE". Dementsprechend könnte es false-positives geben, wie gesagt, es ist noch sehr simpel gehalten.
Ich schätze es würde dir auch reichen, wenn ein beliebiger Sound abgespielt wird, wenn ein Stream live geht?
-
24.11.2022, 23:20 #7
AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Ein Sound wäre auch gut oder irgendwas was es auffälliger macht (sodass man es auch im Hintergrund mitkriegt), will dir auch nicht zu viel abverlangen.
Tust gerade schon sehr viel für mich.
Hast du ansonsten vllt eine Losung, denn wenn er LIVE oder 5000 findet, passiert nach 15 Sekunden kein reload. (Heißt, das Skript erkennt LIVE oder 500, benachrichtigt (was wir bisher haben), nun wartet er 15 Sekunden und lädt einmal (1×) den Tab oder die Seite neu. Fertig. Das wäre was fehlt oder bisher nicht richtig funktioniert)
Wenn beides behoben ist bin ich mehr als glücklich, das ist dann nämlich alles was ich wollte u das Ware es danach auch :-)Geändert von Iomega (24.11.2022 um 23:28 Uhr)
-
24.11.2022, 23:51 #8
- Registriert seit
- 15.11.2011
- Beiträge
- 6.408
- Blog Entries
- 5
Thanked 9.168 Times in 3.038 PostsAW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Das ist das Problem, wenn man im gesamten gesamten Quelltext (DOM) nach einer Zeichenkette sucht: Es gibt diverse Szenarien, in denen das fälschlicherweise Treffer generiert. Sei es durch Vorschläge oder andere Inhalte auf einer nicht selbst kontrollierten Seite wie z.B. Beschreibungsfelder. Ich würde das daher meiden und lieber die Struktur genauer anschauen und spezifische Selektoren entwickeln. Dafür sind HTML/XML ja gemacht. Ähnlich, wie ich es beim Web-Scraping mit Selenium hier mal gezeigt habe, was du machst ist im Grunde das Gleiche, nur an einer anderen Stelle (direkt im Browser, statt den Browser fernzusteuern). Den Selektor .twilight-main .live-indicator-container findet man Augenscheinlich nur, wenn ein Stream läuft. Damit wird auf die Inhaltsbox (ohne Sidebar links) gefiltert und in dem zweiten Container ist der "Live" Schriftzug unter dem Video:
Code:let isLive = document.querySelector('.twilight-main .live-indicator-container') !== null
Müsste man nun testen, ob das überall gleich ist, oder es möglicherweise spezielle Ausnahmen gibt. Die Entwickler-Werkzeuge der Browser sind dazu sehr nützlich, werden in Firefox und den meisten Chromium basierten Browsern mit F12 geöffnet. Noch detaillierter geht natürlich auch und reduziert die Fehleranfälligkeit. Beispielsweise könnte man einen Gegencheck machen, welcher Profilcontainer da sein müsste, wenn kein Stream läuft. Macht durchaus Sinn, weil das ja eine Drittanbieter-Seite ist, du keine definierten Schnittstellen nutzt und keine Kontrolle darüber hast. Irgendwann wird das nicht mehr funktionieren, wenn die an ihrer Struktur etwas ändern.
Ein saubererer, aber auch aufwändigerer Weg wäre über die offiziellen APIs zu gehen. Darüber hatten wir eine Zeit lang mal den aktuellen Stream von Sky.NET hier eingebunden, sofern einer als laufend erkannt wurde. Theoretisch wäre über den Weg auch mehr denkbar, z.B. eine Benachrichtigung über Messenger oder so was. Den anonymen Zugang hat Twitch aber anscheinend abgeschaltet und fordert Authentifizierung. Wenn du den Browser eh die ganze Zeit offen hast, das reicht und dich nicht mit APIs, JSON & co. beschäftigen möchtest, ist das Injizieren in den Browser über Werkzeuge wie Tampermonkey für dich der einfachere/bessere Weg.
-
The Following 3 Users Say Thank You to DMW007 For This Useful Post:
Iomega (25.11.2022), Manipulate (25.11.2022), raspberryfan (30.11.2022)
-
25.11.2022, 02:31 #9
AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Hey DMW007, vielen Dank für deinen Input!
Ich kam auch auf die Idee die offizielle Twitch-Api dafür zu nutzen, Problem war jedoch, dass ich dafür einen Key benötigen würde, ich meinen nicht weitergeben wollte und ich mir dann unsicher war, ob es vielleicht dann doch nicht overkill wäre. Wäre aber die sauberste Lösung von allen, da gebe ich dir Recht.
Daher schaue ich mal mehr auf die Struktur von Twitch,- theoretisch könnte man auch ein kleines Script außerhalb des Browsers schreiben, welcher alle 15 Sekunden alle angegeben Twitch Channels abklappert und wenn einer Online kommt, ne Benachrichtigung erstellen und dann den Browser starten mit der Channel-URL. Wäre dann so ähnlich wie mit der offiziellen API, nur müsste man dann wahrscheinlich auch headless Selenium nutzen.. Was dann vllt. doch wieder etwas zu viel wäre. Am Wochenende habe ich mehr Zeit mir das genauer anzugucken.
@Iomega wie häufig würden sich die Channel die du "abcampen" möchtest denn ändern? Wenn ich mich doch für das Script entscheide, wäre das konfigurierbar, aber wäre wahrscheinlich etwas ätzend bei häufiger Änderung.
-
The Following 3 Users Say Thank You to Manipulate For This Useful Post:
DMW007 (25.11.2022), Iomega (25.11.2022), raspberryfan (30.11.2022)
-
25.11.2022, 02:56 #10
AW: Script wenn "Wörter" gefunden Reload Site/Script when "words" found Reload site
Erstmal wieder Danke .
Zu dem Beitrag zu DMW komme ich gleich und Editiere ich dann .
Bin gerade erst von Arbeit Heim.
Die Channel sind immer die selben 4., sind derzeit die wichtigsten, die anderen Campe ich mit Chatty ab, nur das man da halt keine Punkte kriegt etc.
Deine Lösung hört sich schonmal gut an und den Key könnte ich dir natürlich auch geben, wäre ja nicht so das problem.
Es ist ja sowieso nur für eigennutzen.
Bin null daran interessiert es weiter zu geben, geschweige sonstiges.
Sonst hat das ja jeder und jeder dann auch etliche Punkte womit die etwas einlösen können und das muss nicht sein xD. Immerhin möchte ich die ja hehe.
An einer API hatte ich auch schon gedacht, nur nebenbei bei der Arbeit Programmieren lernen, ist nun auch nicht all zu geil.
Deswegen auch die frage nach dem Script.
Weiß ja nicht wie viel Zeit es in Anspruch nimmt, daher dachte ich erstmal an das Script, sodass es so funktioniert und wenn du Lust hast kannst dann ja das mit der API machen .
Eine Gegenleistung würdest du natürlich auch kriegen .
Weiterhin danke allen die mir gerade helfen.
Danke dir ebenfalls für deine Nachricht.
Dein Video habe ich mir mal angeschaut und joa, dann müsste ich mich natürlich mit Python einarbeiten und erlernen.
Wobei es auf dem ersten Blick noch relativ machbar aussah, so wie du auch meintest .
Zu deinem Code:
Den habe ich versucht ins Tampermonkey script einzubauen, nur der spuckt ne fehlermeldung aus.
eslint: null - parsing error: Unexpected token error
Probiert habe ich es so:
Code:ready(checkForString); function checkForString() { for (let isLive for stringToSearch) { if (document.querySelector('.twilight-main .live-indicator-container') !== null) { alert("Found: " + isLive); // stops the page for reloading // do other cool stuff here return; } }
Code:ready(checkForString); function checkForString() { for (let stringToSearch of isLive) { if (document.querySelector('.twilight-main .live-indicator-container') !== null) { alert("Found: " + isLive); // stops the page for reloading // do other cool stuff here return; } }
Geändert von Iomega (25.11.2022 um 13:10 Uhr)
Ähnliche Themen
-
[Java] PopupParser - "Definitionen"/"Daten" verstanden, parser aber nicht (Beispiele)
Von Bubble Gum im Forum Reverse EngineeringAntworten: 5Letzter Beitrag: 25.04.2018, 19:13 -
Unterschied zwischen "ChicaPC-Shield" und "Malwarebytes Anti-Malware"?
Von Accountuser im Forum WindowsAntworten: 1Letzter Beitrag: 29.12.2013, 14:31 -
"Wer ist online" & "Forum-Mitarbeiter" stimmen nicht überein
Von Devon im Forum SupportAntworten: 2Letzter Beitrag: 29.09.2012, 15:24 -
Hacker-Angriff auf "World of WarCraft" und "Diablo 3"!
Von Waterpolo im Forum Gaming-NewsAntworten: 3Letzter Beitrag: 10.08.2012, 23:35
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.