Javascript/Tampermonkey: Passwort automatisch ausfüllen

OP #7797044
Lesenswert?

Guten Abend,

ich versuche mich gerade daran, einen Login per Skript zu automaitisieren.

Die Anwendung vorab: Es soll ein Weihnachtsgeschenk werden, nämlich ein kleines Display, das den aktuellen Zustand der Solaranlage bei meinen Eltern zeigt. Die Hardware ist ein Raspberry Pi 4 mit einem Display, auf dem ein FullpageOS läuft. Da keine Eingabehardware vorgesehen ist, soll sich der Pi beim Start automatisch auf dem Webserver des KOSTAL KSEM (das ist das Energymeter) einloggen, woraufhin die aktuellen Energieflüsse dargestellt werden.

Das KSEM ist von außerhalb des lokalen Netzes nicht erreichbar, weshalb ich keine Sicherheitsbedenken habe, das Passwort in einem Skript zu verankern.

Hinweis: Die folgende Fehlerbeschreibung ist bisher nur auf dem PC getestet.

Ich konnte ein Skript anlegen, das das Passwort ausfüllt und auch das Absenden per button.click() funktioniert. ABER: Das Passwort wird als falsch markiert. Natürlich übergebe ich dem Skript das richtige Passwort und konnte sogar nachvollziehen, dass es genügt, hinter dem per Skript ausgefüllten Passwort ein Zeichen zu tippen wieder zu löschen. Dann wird das Passwort als richtig erkannt.

Es scheint also, als würde das Passwortfeld noch irgendwelche Randbedingungen prüfen. Hat jemand von euch eine Idee, was ich hier tun kann? Die Tastendrücke dem Eingabefeld manuell zu übergeben habe ich probiert, das geht leider nicht.

Sogar mit Begründung: https://stackoverflow.com/questions/45457875/programmatically-send-keys-to-input-using-dispatchevent

Hier noch mein Skript: (Das Setinterval wird benötigt, weil ich abwarten muss, bis das Popup mit der Passwortabfrage aufgeht).

1
// ==UserScript==
2
// @name         New Userscript
3
// @namespace    http://tampermonkey.net/
4
// @version      2024-12-20
5
// @description  try to take over the world!
6
// @author       You
7
// @match        http://192.168.10.65/login
8
// @icon         https://www.google.com/s2/favicons?sz=64&domain=10.65
9
// @grant        none
10
// ==/UserScript==
11

12
var LoginInterval;
13

14
(() => {
15
  LoginInterval = setInterval(CheckforInput, 1000);
16
})();
17

18
function CheckforInput() {
19
    var inputs = document.getElementsByTagName('input');
20
    if(inputs.length) {
21
        inputs[0].value = "Abcd1234567890";
22
        var buttons = document.getElementsByTagName('button');
23
        if(buttons.length) {
24
            buttons[5].click();
25
            clearInterval(LoginInterval);
26
        }
27
    }
28
}

Ja, das mit den festen Indizes ist nicht schön, funktioniert aber erstmal und der Webserver wird sich wohl auch nicht mehr ändern...

Falls jemand eine alternative Lösung für mein Problem hat: Gerne :)

Schonmal vielen Dank für eure Hilfe Karsten

OP #7797072
Lesenswert?

Moin,

danke für die schnelle Reaktion! Ich konnte da keine Eventlistener finden, habe aber mal den Baum aus dem Debugger rauskopiert. Vielleicht wird ja jemand schlau draus?

Da das ziemlich viel Text ist, habe ich es lieber angehängt. Anbei auch mal ein Bild der Loginseite, falls es interessiert...

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren