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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.