• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Greasemonkey: Auto Reload und Click auf Button

omabande

New member
Hallo,

ich versuche gerade mein erstes GreaseMonkey Script zu basteln.

Folgendes soll es können:

* Website Reload alle 3 Sekunden
* Wenn der entsprechende Button verfügbar ist draufklicken, Reload stoppen und Sound abspielen.

Aktuell erledigt eine Erweiterung den AutoReload der Seite und wenn der Button verfügbar ist wird er auch geklickt. Und zwar mit folgender Codezeile:

document.getElementsByClassName('waste_button').click();

Ich würde gerne alles in Greasemonke erledigt haben.....

Geht das????

So sieht das Script aktuell aus:

HTML:
// ==UserScript==
// @name         Autoclick
// @namespace    [url=http://tampermonkey.net/]Tampermonkey ? Home[/url]
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    document.getElementsByClassName('waste_button')[0].click();
})();
 
Zuletzt bearbeitet von einem Moderator:
Erstmal Danke....

wie muss ich das Script denn aufbauen dass es die Seite alle 3 Sekunden neu lädt und wenn der Button verfügbar ist darauf klickt und den Reload stoppt?
 
Also, ich hab mal gebastelt.... das Klicken auf den Button funktioniert wenn er auftaucht.....

Nur der Reload der Page noch nicht?????

An was könnte das liegen????

HTML:
(function() {
    'use strict';

    var id = 'wastebutton';
    
if (document.getElementsByClassName(id) === true);
    {
        document.getElementsByClassName('wastebutton')[0].click();
    
    } if (document.getElementsByClassName(id) === false); {
        window.setTimeout("location.reload()",2000);
    
}
})()
 
Zuletzt bearbeitet:
An was könnte das liegen????
Also, ich hab mal gebastelt.... das Klicken auf den Button funktioniert wenn er auftaucht.....
das liegt daran, dass du hier ein semikolon hast
Code:
if (document.getElementsByClassName(id) === true);
dadurch wird der folgende code immer ausgeführt
Code:
{
  document.getElementsByClassName('wastebutton')[0].click();  
}
Nur der Reload der Page noch nicht?????
das liegt daran, dass getElementsByClassName ein array/collection liefert, die ist nie === true oder false, womit der vergleich immer false liefert und die if-anweisung damit nie ausgewertet wird
die if-anweisung ist aber auch hier wieder ein semikolon
damit wird
Code:
{
        window.setTimeout("location.reload()",2000);
    
}
auch immer ausgeführt und die seite sollte eigentlich alle 2 sekunden neu geladen werden.
 
das liegt daran, dass du hier ein semikolon hast
Code:
if (document.getElementsByClassName(id) === true);
dadurch wird der folgende code immer ausgeführt
Code:
{
  document.getElementsByClassName('wastebutton')[0].click();  
}

Das Semikolon habe ich raus.
das liegt daran, dass getElementsByClassName ein array/collection liefert, die ist nie === true oder false, womit der vergleich immer false liefert und die if-anweisung damit nie ausgewertet wird
die if-anweisung ist aber auch hier wieder ein semikolon
damit wird
Code:
{
        window.setTimeout("location.reload()",2000);
    
}
auch immer ausgeführt und die seite sollte eigentlich alle 2 sekunden neu geladen werden.

Auch hier wurde das Semikolon entfernt.

Wie kann ich denn dann abklären ob die Bedingung ob der Button vorhanden ist oder nicht und dementsprechend eine Aktion ausgeführt wird???

Und nein, die Seite lädt noch nicht alle 2 Sekunden
 
Wie kann ich denn dann abklären ob die Bedingung ob der Button vorhanden ist oder nicht und dementsprechend eine Aktion ausgeführt wird???
wenn ein element mit der entsprechenden class vorhanden ist, ist die collection nicht leer, sonst ist sie es
https://developer.mozilla.org/de/docs/Web/API/HTMLCollection#Eigenschaften

Und nein, die Seite lädt noch nicht alle 2 Sekunden
ach ja, der click geht auf undefined, wenn getElementsByClassName eine leere collection liefert
Code:
document.getElementsByClassName('wastebutton')[0].click();
damit bricht das script ab
 
Ich beneide Euch ja dass Ihr den Code wie ein Buch lesen könnt.....

Danke für die Antworten. Werde mal weiterbasteln, versuchen zu kapieren und mich dann melden.
 
Statt var id solltest lieber einen eindeutigen Variablennamen wählen, damit du das nich mit einer id verwechslest, also z.B. var wastebutton oder var node wenn du in dem Script nur den einen "Konten" benötigst.

Stat dem reinen if (node) {...} kannst du auch ein if (node) {...} else {...} verwenden, um ein wahr/falsch zusteuern.

window.SetTimeout() sollte mann keinen String (Zeichenkette) übergeben. Stattdessen eine Funktionsreferenz oder eine anonyme Funktion übergeben.

Beispiel (ungetestet):
Code:
(function() {
    'use strict';

    var node = document.getElementsByClassName('wastebutton')[0];
    
    if (node) {
        node.click();
    } else {
        window.setTimeout(function () {
            window.location.reload();
        }, 2000);
    }
})()
 
Zurück
Oben