GreaseMonkey Script

Hans0815

Newbie
Registriert
Juli 2024
Beiträge
2
Hallo,

ich suche Hilfe beim Programmieren eines GreaseMonkey Scripts und habe gehofft dass ich Hilfe bekomme.
Leider habe ich in Java keine Programmiererfahrung.
Ich hatte mich der KI bedient und gehofft dass wenigstens irgendetwas funktioniert und ich so Stück für Stück voran komme, aber Fehl am Platz.

Vielleicht hilft das generierte Script trotzdem dem ein oder anderem, der mit Hilfe leisten kann.


Aufgabenstellung:
Auf einer Internetseite (Internetbanking) muss eine Monatsbericht- Liste heruntergeladen werden. Dabei gibt es mehrere Optionen die zum herunterladen mit in die Liste einbezogen werden können.
Es ist sehr Zeitaufwendig die Liste Monat für Monat herunter zu laden und dabei verschiedene Varianten auszuwählen, die ich haben möchte, da bei diversen Aktivitäten wie z.B dem abspeichern Wartezeiten vorkommen.

Ich benötige daher ein Script, das mir so viele Schritte wie möglich automatisiert.

Es gibt ein Datums Eingabefeld, das man manuell eintragen kann.
Datum ab, Datum bis.
Alternativ kann man den integrierten Kalender öffnen und den benötigten Zeitraum manuell auswählen.


Daher, die notwendigen Schritte:
Liste anzeigen, Datumsbereich eingeben (Liste lädt neu)
Auf „Download und Druck“ klicken, dabei öffnet sich ein Feld, in dem man diverse Optionen per Checkbox mit einbeziehen kann, danach kann die Liste mit klick auf „Drucken / Speichern“ an den Softwaredrucker geleitet und heruntergeladen werden. Es öffnet sich das Drucker- Menü, in dem ich die Liste an den PDF- Drucker senden kann.
Des weiteren kann die Liste noch als CSV Datei heruntergeladen werden, was für mich auch sehr wichtig ist.


Datumsbereich:

Es ist einfacher ich wähle das benötigte Monat manuell aus, darum muss sich das Script nicht kümmern.

Datum von: Äußeres HTML:
<input type="text" rdsstartdate="" formcontrolname="start" zvinputmaskre="DATUMSEINGABE" class="rds-start-date rds-date-range-input-inner ng-untouched ng-pristine ng-valid" placeholder="Von Datum" id="rds-date-range-input-0" aria-haspopup="dialog" min="2021-07-01">


Datum bis: Äußeres HTML:
<input type="text" rdsenddate="" formcontrolname="end" zvinputmaskre="DATUMSEINGABE" class="rds-end-date rds-date-range-input-inner ng-untouched ng-pristine ng-valid" placeholder="Bis Datum" aria-haspopup="dialog" min="2021-07-01">




Fenster „Download und Druck“:
Fenster „CSV:

Download und Druck: Inneres HTML:

<button icon="download" rdsinput="" rdsbarebonebutton="" rds-popover="" rdspopoverplacement="bottom" viewport="auto" class="rds-barebone-button rds-input-element ng-tns-c427123406-3 rds-barebone-button-icon rds-input-barebone-button cdk-text-field-autofill-monitored" type="button" aria-label="Download und Druck" id="rds-input-1" aria-invalid="false" aria-required="false" autocomplete="off"><div class="rds-barebone-button-wrapper"><div class="rds-barebone-button-icon-container ng-star-inserted"><rds-icon role="img" class="rds-icon notranslate rds-iconfont icon-download rds-icon-no-color" aria-hidden="true" data-rds-icon-type="font" data-rds-icon-name="icon-download"></rds-icon></div><!----><!----></div></button><!----><span class="rds-form-field-label-wrapper ng-tns-c427123406-3"><!----></span>



Download und Druck: Äußeres HTML:
<div class="rds-form-field-infix ng-tns-c427123406-3 rds-form-field-infix-barebone-button"><button icon="download" rdsinput="" rdsbarebonebutton="" rds-popover="" rdspopoverplacement="bottom" viewport="auto" class="rds-barebone-button rds-input-element ng-tns-c427123406-3 rds-barebone-button-icon rds-input-barebone-button cdk-text-field-autofill-monitored" type="button" aria-label="Download und Druck" id="rds-input-1" aria-invalid="false" aria-required="false" autocomplete="off"><div class="rds-barebone-button-wrapper"><div class="rds-barebone-button-icon-container ng-star-inserted"><rds-icon role="img" class="rds-icon notranslate rds-iconfont icon-download rds-icon-no-color" aria-hidden="true" data-rds-icon-type="font" data-rds-icon-name="icon-download"></rds-icon></div><!----><!----></div></button><!----><span class="rds-form-field-label-wrapper ng-tns-c427123406-3"><!----></span></div>



Dabei kann ich in dem Fenster von "Download und Druck" umschalten auf CSV.
"Download und Druck" ist immer die Standard Seite die sich öffnet.
Internes HTML: Download und Druck
Drucken / Speichern <span rdsripple="" class="rds-ripple rds-button-ripple"></span><span class="rds-button-focus-overlay"></span>

Äußeres HTML: Download und Druck
<button type="button" rds-pseudo-radio-button="" class="rds-button-base rds-button rds-focus-indicator rds-pseudo-radio-button rds-pseudo-radio-button-checked rds-primary ng-star-inserted" id="rds-pseudo-radio-button-86-input" name="rds-pseudo-radio-button-group-84" checked="true" tabindex="0" style="height: 40px;"> Drucken / Speichern <span rdsripple="" class="rds-ripple rds-button-ripple"></span><span class="rds-button-focus-overlay"></span></button>

Internes HTML: CSV
CSV <span rdsripple="" class="rds-ripple rds-button-ripple"></span><span class="rds-button-focus-overlay"></span>

Äußeres HTML: CSV
<button type="button" rds-pseudo-radio-button="" class="rds-button-base rds-button rds-focus-indicator rds-pseudo-radio-button ng-star-inserted" id="rds-pseudo-radio-button-87-input" name="rds-pseudo-radio-button-group-84" checked="false" tabindex="0" style="height: 40px;"> CSV <span rdsripple="" class="rds-ripple rds-button-ripple"></span><span class="rds-button-focus-overlay"></span></button>

Internes HTML: Als CSV speichern
Als CSV speichern<!----><!----><!---->

Äußeres HTML: Als CSV speichern
<span class="rds-button-wrapper">Als CSV speichern<!----><!----><!----></span>



Dabei gibt es 5 Checkboxen die ich an bzw. abwählen kann.
Inneres HTML:1

<input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-46-input" tabindex="0" aria-checked="true"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span>



Äußeres HTML:1
<span class="rds-checkbox-inner-container"><input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-46-input" tabindex="0" aria-checked="true"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span></span>




Inneres HTML:2
<input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-47-input" tabindex="0" aria-checked="true"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span>


Äußeres HTML:2
<span class="rds-checkbox-inner-container"><input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-47-input" tabindex="0" aria-checked="true"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span></span>



Inneres HTML:3
<input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-48-input" tabindex="0" aria-checked="true"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span>

Äußeres HTML:3
<span class="rds-checkbox-inner-container"><input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-48-input" tabindex="0" aria-checked="true"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span></span>

Inneres HTML:4
<input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-49-input" tabindex="0" aria-checked="true"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span>


Äußeres HTML:4
<span class="rds-checkbox-inner-container"><input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-49-input" tabindex="0" aria-checked="true"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span></span>




Inneres HTML:5
<input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-50-input" tabindex="0" aria-checked="false"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span>

Äußeres HTML:5
<span class="rds-checkbox-inner-container"><input type="checkbox" class="rds-checkbox-input cdk-visually-hidden" id="rds-checkbox-50-input" tabindex="0" aria-checked="false"><span rdsripple="" class="rds-ripple rds-checkbox-ripple rds-focus-indicator"><span class="rds-ripple-element rds-checkbox-persistent-ripple"></span></span><span class="rds-checkbox-frame"></span><span class="rds-checkbox-background"><svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" class="rds-checkbox-checkmark"><path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="rds-checkbox-checkmark-path"></path></svg><span class="rds-checkbox-mixedmark"></span></span></span>




Die erste Checkbox lasse ich auf Standard, aktiviert.
Die zweite Checkbox wird einmal angehakt – gedruckt und einmal deaktiviert gedruckt
Die dritte Checkbox wird einmal angehakt – gedruckt und einmal deaktiviert gedruckt
Die vierte Checkbox lasse ich auf Standard, aktiviert.
Die fünfte Checkbox lasse ich auf Standard, deaktiviert.

Das heißt, ich drucke in 4- verschiedenen Formatlisten + einmal CSV:


Checkbox1

X

x

x

x

Checkbox2

X

O

X

O

Checkbox3

X

X

O

O

Checkbox4

X

x

x

x

Checkbox5

o

o

o

o


Es muss nur einmal das CSV Format gedruckt werden, da sich dieses nicht unterscheidet.
Es ist wichtig, das die Dateien entweder in getrennten, Unterordnern abgespeichert werden, oder zur Identifizierung eine Änderung im Dateinamen aufweisen.

Ich speichere daher immer im Monatsnamen ab, also 01 bis 12 und wähle den passenden Unterordner.

Wenn es leichter ist, kann immer der selbe Ordner zum speichern verwendet werden.
Die Datei könnte dann zur Identifizierung einen entsprechenden erweiterten Namen aufweisen, z.B. für den Monat Jänner:
01-X-X,
01-O-X,
01-X-O,
01-O-O,

danach kann ich mir die Dateien noch immer manuell in die korrekten Unterordner verschieben, wäre aber ganz toll wenn mir das das Script machen könnte.







Ich habe es bis jetzt immer so gemacht:
Monatsbereich eingetragen (per integriertem Kalender), danach ein Speicherformat per Checkbox ausgewählt. Die Monate die ich noch nicht gespeichert habe alle nach einander abgespeichert.
Beim zweiten, dritten und vierten Durchlauf genau gleich vorgegangen.

Wenn mir jemand das Script coden kann, würde ich gleich Monateweise abspeichern, dann muss ich nur einmal das Datum auswählen.
So habe ich immer ca. 3 Monate zusammen kommen lassen und bin gleich einmal mit speichern und Drucken bis zu einer Stunde beschäftigt, das ist wirklich übel.


Das ganze kommt dann auch noch einmal für jemanden anderen zum Einsatz, das wäre nun der doppelte Zeitaufwand für mich, für den gesamten Ablauf.


// ==UserScript==
// @name Automatisierter Umsatzlisten-Downloader mit Button
// @namespace http://tampermonkey.net/
// @version 0.5
// @description Fügt einen Button hinzu, um den Download der Umsatzlisten bei Raiffeisen Internetbanking auszulösen
// @author Dein Name
// @match
// @Grant none
// ==/UserScript==

(function () {
'use strict';

// Funktion zum Herunterladen der Umsatzliste
function downloadTransactions() {
var downloadButton = document.querySelector('button#rds-input-9'); // ID des Download-Buttons
if (downloadButton) {
downloadButton.click();
console.log('Download- und Druck-Button geklickt.');

// Warten, bis das neue Fenster geöffnet ist und den Druck/Speichern-Button klicken
setTimeout(function () {
var printSaveButton = document.querySelector('span.rds-button-wrapper'); // Klasse des Druck/Speichern-Buttons
if (printSaveButton) {
printSaveButton.click();
console.log('Drucken / Speichern geklickt.');
} else {
console.error('Drucken / Speichern-Button nicht gefunden.');
}
}, 2000); // Wartezeit anpassen, falls nötig

} else {
console.error('Download- und Druck-Button nicht gefunden.');
}
}

// Funktion zum Erstellen des grafischen Buttons
function createDownloadButton() {
var button = document.createElement('button');
button.textContent = 'Download Umsatzliste';
button.style.position = 'fixed';
button.style.top = '10px';
button.style.right = '10px';
button.style.zIndex = 1000;
button.style.padding = '10px';
button.style.backgroundColor = '#4CAF50';
button.style.color = 'white';
button.style.border = 'none';
button.style.borderRadius = '5px';
button.style.cursor = 'pointer';
button.style.fontSize = '16px';

button.addEventListener('click', function () {
downloadTransactions();
});

document.body.appendChild(button);
}

// Prüfen, ob wir uns auf der richtigen Seite befinden
if (window.location.href.includes('/kontozentrale/umsaetze')) {
console.log('Auf der richtigen Seite.');

// Grafischen Button erstellen
createDownloadButton();
} else {
console.error('Nicht auf der richtigen Seite.');
}
})();

2024-07-07_213310.png
 
Zuletzt bearbeitet:
Ich verstehe was du machen willst aber es ist relativ schwierig das so ohne Zugriff auf die Webseite hinzubekommen, was ja bei Onlinebanking schwierig bis unmöglich ist.
Du sagst du braucht 1 Stunde für das erstellen der CSV und der anderen Ansichten für 3 Monate, also grob 20 Minuten pro Monat. Macht grob gesagt 4 Minuten pro Ansicht (4 Pdfs und 1 CSV) Ich nehme an das dabei das Auswählen der Checkboxen und des Datumsbereichs einen kleinen Teil der Zeit ausmachen, es sei denn die Webseite ist extrem träge. Wenn die größte Wartezeit beim Erstellen der Druckansicht entsteht ist es fraglich wieviel Zeit überhaupt eingespart werden kann, da der Druckdialog meines Wissens nach nicht umgangen werden kann und der druckdialog auch nicht automatisiert werden kann (automatischer Dateiname etc). Meiner Einschätzung nach liegt der Aufwand das zu programmieren nicht im Verhältnis zur zu erwartenden Zeitersparnis.
 
Zuletzt bearbeitet:
Hallo Pas06,

Wäre es möglich mit dem Greasemonkey Script eine Anwendung am Computer zu starten?
Dadurch könnte ich z.B. mit einem Macro oder noch besser AutoIT den Druckdialog und den Rest handhaben.
Alleine schon auf die Startseite vom Internetbanking zu gelangen ist ein reines Geduldsspiel.
Mit AutoIT ist es auch möglich, auf das starten bestimmter Fenster zu warten. Da kann ich dann diese Schritte abfangen und weitermachen. Das dürfte ich hinbekommen.
Da wäre mir sehr geholfen, wenn ich das zuvor beschriebene Szenario automatisieren könnte.

Es ist Wahnsinnig wie viele Manuelle Schritte durchgeführt werden müssen, bis man ab Browserstart zum abgespeicherten und gedruckten Blatt Papier kommt. Alleine schon 2x Passwort und 1x TAN.... Auch das Navigieren mittels Windows 10 Dateibrowser ist sehr träge. Das ging bis Windows 8 absolut reibungslos und ohne Verzögerungen.

Ich hatte gehofft, durch diese Seitencodes die ich eingefügt habe, dass das nicht so schwer umzusetzen wäre.
Wenigstens der rein reine Webbasierte Teil.
 
Zurück
Oben