Flatex: alle Dokumente herunterladen

In diesem Artikel erkläre ich, wie man bei Flatex aus dem Dokumentenarchiv (Posteingang) alle PDF-Dokumente herunterlädt. Leider gibt es bei Flatex hierfür keine automatische Exportfunktion und die Extraktion der PDFs ist nicht trivial, mehr dazu im Technischen Hintergrund weiter unten. Ich habe daher ein Macro gebaut, dass dieses Problem löst und das Herunterladen erlaubt ohne sich einzeln durch hunderte Dokumente klicken zu müssen. Falls du auf der Suche nach einem Depot mit günstigeren Konditionen bist, dann schau dir gerne hier meinen Vergleich an.

1. Kompatiblität

Diese Anleitung bezieht sich auf Mozilla Firefox 71 und funktionierte für mich am 10.06.2020 au einem Bildschirm mit 4K (die Auflösung sollte theoretisch keine Rolle spielen). Das ganze sollte sich auch auf Chromium übertragen lassen, da hierfür die selbe Schnittstelle existiert. Sollte das hier genannte Prozedere nicht mehr funktionieren kann das die im Abschnitt 5 aufgelisteten Ursachen haben. Hinterlasse in diesem Falle gern einen Kommentar. Das Skript funktioniert auf Windows und Mac OS X und vermutlich auch auf GNU/Linux für Flatex Deutschland und Flatex Österreich.

2. Praktische Anleitung

  1. Installiere Selenium IDE
  2. Kopiere den Quelltext von weiter unten auf der Seite. Öffne Notepad (Win + R -> Notepad -> Enter) und füge den Quelltext ein. Wähle Datei -> speichern aus (STRG + S) wähle Dateityp Alle Dateien (*) (WICHTIG!) und gebe den Dateinamen „FlatexDownload.side“ ein. Wenn du Notepad++ installiert hast würde ich dir Empfehlen diesen zu benutzen, da der Standard-Windows-Editor ein paar Macken hat und immer wieder zu unerwarteten Problemen führt.
  3. Logge dich bei Flatex ein und wähle „Alle Dokumenttypen“, „Alle“, „Indivudueller Zeitraum“ aus.
  4. Wähle ein Startdatum aus das auf jeden Fall vor deiner Kontoeröffnung liegt (bei mir war das früheste wählbare Datum der 01.01.2005). Ändere Gelesen zu Alle.
  5. Gehe auf die Firefox Einstellungen Pop-Up Fenster Blockieren Ausnahmen und gebe https://konto.flatex.de beziehungsweise https://konto.flatex.at wenn du bei Flatex Östterreich bist in die Zeile ein und klicke auf Erlauben.

Theoretisch kannst du nun dir alle Dokumente bis zum heutigen Tag anzeigen lassen, allerdings stellt Flatex nur die letzten (laut eigener inkorrekter Anzeige „ersten“) 100 Dokumente dar. Deshalb empfiehlt es sich meiner Ansicht nach die Dokumente jahresweise abzuspeichern.

  1. Wenn du Windows benutzt, dann springe direkt zu Schritt 7. Wenn du ein anderes Betriebssystem nutzt, dann führe vorher die in Auf nicht Windows-Systemen beschriebenen Schritte durch. Wenn du Flatex Österreich benutzt, dann führe die Andreas‘ Kommentar aufgelisteten Schritte durch bevor du mit Schritt 7 weiter machst.
  2. Wähle den 31.12. des 1. Jahres deiner Kontoeröffnung aus
  3. Klicke oben rechts in der Leiste auf das Symbol Einstellungen Firefox → Einstellungen → Downloads → Alle Dateien in folgendem Ordner abspeichern → „Flatex\20xx“. Ändere bei „Anwendungen“ das „Portable Document Format“ zu „Datei speichern“. (Das entfernt den Dialog vor dem Abspeichern).
  4. Klicke auf das Seleniumsymbol SeleniumIcon oben rechts in der Leiste von Firefox. Es öffnet sich ein neues Fenster mit einem Menü.
  5. Wähle „Open Existing Project“ und wähle mein heruntergeladenes Macro aus.
  6. Starte das Macro indem du auf den Abspielknopf Abspielsymbol drückst.
  7. Das Macro lädt nun alle auf der Seite Abrufbaren PDFS herunter.
  8. Sobald länger als für 5 Sekunden sich keine neuen Fenster mehr öffnen und Firefox nicht mehr zappelt, ist der Vorgang für die gerade ausgewählten PDFs beendet. Im Selenium IDE Fenster sollte dich die Botschaft „Script completed successfully“ begrüßen.
  9. Ändere nun das Start- und Enddatum entsprechend auf das nächste Jahr und ändere den Download ordner auf „Flatex\20xx+y“.
  10. Schließe das Flatexfenser welches vom Macro geöffnet wurde (sehr wichtig, sonst kann es beim nächsten Ausführen zur Fehlermeldung kommen).
  11. Starte den Prozess erneut indem du auf das Abspielensymbol drückst. Wiederhole bis du alle Jahre archiviert hast.

2.1 Auf nicht Windows-Systemen

Flatex erkennt welches Betriebssystem du verwendest und schickt dir dann eine Webseite die nicht nur ein anderes Aussehen (CSS) hat sondern auch andere interne Semantikstruktur (HTML). Da diese Anleitung auf der Semantikstruktur für Windows basiert musst du also folgendes tun:

  1. Installier dir eine Firefox Erweiterung die dir erlaubt den Benutzerclienten den dein Browser bei der HTTP(S)-Anfrage angibt zu manipulieren, zum Beispiel User Agent Switcher“ und stelle auf Windows um.
  2. Gehe in die Einstellungen von Firefox -> Cookies und Website-Daten -> Daten verwalten -> suche nach Flatex markiere die gefunden Einträge und wähle Ausgewähltes entfernen.
  3. Fahre mit Schritt 7 fort.

3. Quelltext

{
  "id": "f8551403-a89c-4751-b6fe-066386359340",
  "version": "3.0",
  "name": "FlatexDownload",
  "url": "https://konto.flatex.de",
  "tests": [{
    "id": "ad0cd28d-7bf9-4590-a38c-98834e14d625",
    "name": "FlatexDownloadScript",
    "commands": [{
      "id": "86862c98-ce1c-4028-9ce5-823f8d0e14ef",
      "comment": "",
      "command": "open",
      "target": "/banking-flatex/documentArchiveListFormAction.do",
      "targets": [],
      "value": ""
    }, {
      "id": "a8b96cc8-7cd6-42a9-87a7-dbbb4cf8a7c5",
      "comment": "",
      "command": "setWindowSize",
      "target": "1280x720",
      "targets": [],
      "value": ""
    }, {
      "id": "e9456761-1a49-42c9-bdb4-36f4f2d70586",
      "comment": "",
      "command": "storeWindowHandle",
      "target": "root",
      "targets": [],
      "value": ""
    }, {
      "id": "4b381b95-2e4b-4b48-a0ad-ab1e2d036d47",
      "comment": "",
      "command": "selectWindow",
      "target": "handle=${root}",
      "targets": [],
      "value": ""
    }, {
      "id": "635f5774-6a68-49aa-8f78-bbdf36871157",
      "comment": "",
      "command": "pause",
      "target": "3000",
      "targets": [],
      "value": ""
    }, {
      "id": "ff78ecb6-780a-47dc-abd8-aed1648a796a",
      "comment": "",
      "command": "store",
      "target": "1",
      "targets": [],
      "value": "iter"
    }, {
      "id": "6893606d-e905-4527-8818-f8eb6a64f6bb",
      "comment": "",
      "command": "storeXpathCount",
      "target": "xpath=//table/tbody/tr/td/table/tbody/tr",
      "targets": [],
      "value": "rowCount"
    }, {
      "id": "bbe4b87d-11fb-480e-897c-f37e961a7b20",
      "comment": "",
      "command": "echo",
      "target": "Number of rows is ${rowCount}",
      "targets": [],
      "value": ""
    }, {
      "id": "6c6c0775-d239-4e0d-bb33-25d96d2d4cbf",
      "comment": "",
      "command": "while",
      "target": "${iter}<=${rowCount}",
      "targets": [],
      "value": ""
    }, {
      "id": "54e0211e-286b-4203-9441-fbcae02d3c8c",
      "comment": "",
      "command": "echo",
      "target": "Saving ${iter}. document",
      "targets": [],
      "value": ""
    }, {
      "id": "a8069780-383a-4997-85b8-04d2011a0001",
      "comment": "",
      "command": "click",
      "target": "xpath=//table/tbody/tr/td/table/tbody/tr[${iter}]",
      "targets": [
        ["css=#TID190629481_0-0 > .C0", "css:finder"],
        ["xpath=//tr[@id='TID190629481_0-0']/td", "xpath:idRelative"],
        ["xpath=//td/table/tbody/tr/td", "xpath:position"]
      ],
      "value": "",
      "opensWindow": true,
      "windowHandleName": "win9876",
      "windowTimeout": 3000
    }, {
      "id": "6da5712a-509c-4628-8865-c667eefe3cac",
      "comment": "",
      "command": "selectWindow",
      "target": "handle=${win9876}",
      "targets": [],
      "value": ""
    }, {
      "id": "cf1b6252-433b-4bf1-be13-cedfd840696a",
      "comment": "",
      "command": "pause",
      "target": "2000",
      "targets": [],
      "value": ""
    }, {
      "id": "5937cfb3-cddb-4326-8848-c6a85d251476",
      "comment": "",
      "command": "click",
      "target": "xpath=//button[@id=\"download\"]",
      "targets": [],
      "value": ""
    }, {
      "id": "1af05a85-2ff4-4f09-b6aa-eca816e2afbc",
      "comment": "",
      "command": "close",
      "target": "",
      "targets": [],
      "value": ""
    }, {
      "id": "bba64a01-274f-4f77-a543-731b442fff28",
      "comment": "",
      "command": "selectWindow",
      "target": "handle=${root}",
      "targets": [],
      "value": ""
    }, {
      "id": "086dd774-54a4-4b25-992f-d37720c8edf0",
      "comment": "",
      "command": "executeScript",
      "target": "return Number(${iter})+1;",
      "targets": [],
      "value": "iter"
    }, {
      "id": "58f32f41-52c4-46dc-8685-e63fb841915a",
      "comment": "",
      "command": "end",
      "target": "",
      "targets": [],
      "value": ""
    }, {
      "id": "7a8c7897-0882-443d-846e-b89d6435e3e1",
      "comment": "",
      "command": "echo",
      "target": "Script completed successfully",
      "targets": [],
      "value": ""
    }]
  }],
  "suites": [{
    "id": "b272b29e-dfae-4594-b23b-1d76f8ee2f56",
    "name": "Default Suite",
    "persistSession": false,
    "parallel": false,
    "timeout": 300,
    "tests": ["ad0cd28d-7bf9-4590-a38c-98834e14d625"]
  }],
  "urls": ["https://konto.flatex.de/"],
  "plugins": []
}

4. Technischer Hintergrund

Die PDF-Dokumente sind nicht in der Seite direkt verlinkt sind sondern über einen Javascript-PDF-Viewer. Es wird dabei beim Klick auf die Tabellenzeile ein Link zu einem PDF-Viewer generiert und diesem gefolgt. In diesem PDF-Viewer kann dann der Herunterladeknopf geklickt werden.

Das ganze wird in meinem Macro auf folgende Art und Weise automatisiert:

  1. Öffne die Seite „/banking-flatex/documentArchiveListFormAction.do“
  2. Setze das Fenster groß genug, dass Flatex die Formatierung für den Desktop beibehält
  3. Speichere eine Referenz zu dem aktuellen Flatexfenster
  4. Warte 3000 Millisekunden, dass die Seite auf jeden Fall geladen ist
  5. Gehe in einer Schleife von i = 1. bis zur letzten Zeile.
  6. Klicke auf jede i-te Zeile, warte bis das Fenster sich öffnet
  7. Warte dann 2000 ms. Da ein PDF-Viewer geladen wird muss man anschließend nach dessen Laden nochmal warten um sicher zu sein, dass er auch das Dokument in diesem geladen wurde.
  8. Drücke den Knopf herunterladen
  9. Schließe das Fenster
  10. Kehre zum ursprünglichen Fenster zurück, fahre bei Punkt 5 fort.

Ich hoffe das Skript hilft euch eure Daten von Flatex zu exportieren. Und ich empfehle euch einen Blick in das neue Preismodell Flatex‘ zu werfen. Mit ihren neuerlichen Gebühren sind sie schwer noch als kompetitiv zu bezeichnen.

5. Das Skript funktioniert nicht!

Wenn das Skript nicht funktioniert kann das entweder daran liegen dass Flatex die Seitenstruktur stark verändert hat (mit kleineren Änderungen kommt das Skript gut klar), deine Internetverbindung, Rechner oder Software sehr schlecht sind, oder aber dass du einfach Pech hattest. Manchmal funktioniert das Skript nicht beim ersten Mal Ausführen. Es einfach nochmal zu probieren kann helfen. Es kann auch helfen vorm erneuten Probieren alle vom Skript geöffneten (oder auch nur ein paar, probier’s aus, lies die Kommentare) Seiten schließt und es dann nochmal ausführt tadellos. Wie du die beiden anderen Ursachen angehen kannst erfährst du in folgenden zwei Abschnitten:

5.1 Skript aktualisieren

Jedes mal wenn Flatex die HTML-Struktur der Seite verändert (vermutlich mehrmals im Jahr) muss das Skript angepasst werden. Dabei muss im gesamten Skript in der Regel zum Glück nur zwei Ausdrück angepasst werden: der Pfad zur Tabellenzeile und der Pfad zum Herunterladenknopf. Falls das Skript nicht mehr funktioniert und du dir sicher bist, das Skript korrekt ausgeführt zu haben, dann kannst du es auf folgende Art und Weise Teilkapiteln:

5.1.1 Tabellenzeile aktualisieren

  1. Rufe ganz normal dein Dokumentenarchiv bei Flatex auf.
  2. In Firefox (in Chrome ähnlich) klicke mit der rechten Maustaste auf eine Tabellenzeile (also darauf wo du normalerweise klickst um ein Dokument zu öffnen).
  3. Wähle Element untersuchen aus dem Dialog aus
  4. Es öffnet sich nun im unteren Bereich des Fensters eine Übersicht des HMTL-Quelltextes der Seite. Das Element das du rechts angeklickt hattest ist hervorgehoben.
  5. Rechtsklicke das in der HTML-Übersicht hervorgehobene HTML-Element.
  6. Im sich öffnenenden Menü wähle Kopieren -> XPath
  7. Du solltest nun etwas erhalten wie /html/body/div[a]/div[b]/div[c]/div[d]/div[e]/div[f]/table/tbody/tr/td/table/tbody/tr[g] wobei a, b, c, d, e, f, g Platzhalter beliebige natürliche Zahlen sind. Entferne nun [g] und füge den Ausdruck anstelle von //table/tbody/tr/td/table/tbody/tr in Zeile 55 und Zeile 83 (im Quelltext) ein.
  8. Poste ein Kommentar zum aktualisierten Xpath, damit das Skript hier für andere Nutzer angepasst werden kann. Poste den Kommentar selbst wenn deine Aktualisierung nicht funktioniert, damit ich und die Nutzer bescheid wissen ob sich etwas an der Seitenstruktur verändert hat.

5.1.2 Herunterladenknopf aktualisieren

  1. Öffne ein Dokument im Flatex Dokumentenarchiv.
  2. Im nun geöffneten Fenster gilt analoges vorgehen, wie in obiger Beschreibung, nur dass du einen Rechtsklick auf den Herunterladenknopf durchführst und entsprechend die Zeile 111 bearbeitest.
  3. Poste deinen Kommentar mit dem aktualisierten XPath.

5.2 Skript an Datenwüste Deutschland oder langsamen Rechner anpassen

Im Skript warte ich an zwei verschiedenen Stellen auf das Laden einer Seite. Die Wartezeit beträgt dabei beim ersten mal 3000 ms Sekunden und beim den anderen Malen 2000 ms. Nun kann es sein, dass diese Wartezeit für ein vollständiges Laden nicht ausreicht. Das kann an einer langsamen Internetverbindung einem schlechten Browser (Internet Explorer 😉 ) oder an einem Rechner mit mangelnder Leistung liegen. In jedem Falle solltest du ausprobieren, ob du wenn du diese Werte in der Selenium IDE abänderst (einfach bei dem jeweiligen „Pause“-Eintrag die Zahlabändern) du bessere Resultate bekommst. Je höher du die Zahlen setzt, desto länger braucht das Skript. Aber dafür steigt die Wahrscheinlichkeit dass die Wartezeit ausreicht um die Seiten vollständig zu laden bevor das Skript fortfährt. 3000 und 2000 ms Sekunden haben bei mir und vielen anderen Nutzern gut gereicht.

6. Änderungslog

  • 2021-02-18: Anmerkungen von Tom und Manni übernommen
  • 2021-01-23: Warnhinweise entschärft, Anleitung zur Anpassung an langsames Internet oder langasame Rechner hinzugefügt. Skript abgeändert, dass es länger kompatibel sein wird (XPath für den Knopf generisiert, „xpath=/html/body/div[1]/div[2]/div[3]/div/div[1]/div[2]/button[@id=\“download\“ -> „xpath=/button[@id=\“download\“
  • 2021-01: Anleitung zur Aktualisierung hinzugefügt
  • 2020-11: Österreich dank Nutzerkommentar hinzugefügt
  • 2020-09-21: Rolands Test berücksichtigt.
  • 2020-09-19: Rolands Anmerkungen berücksichtigt.
  • 2020-06-10: Die Flatexseite hat sich geändert. Das Element
    „/html/body/div[1]/form[3]/div/div/div[6]/div[2]/table/tbody/tr/td/table/tbody“ ist nun
    „/html/body/div/form[3]/div/div/div[7]/div[2]/table/tbody/tr/td/table/tbody“, im Quelltext habe ich folglich das ganze durch
    „///table/tbody/tr/td/table/tbody“ ersetzt um möglichst lange Kompatibilität zu bewahren.
  • 2020-06-19: Das zweite Pause wieder eingefügt. Danke Erik.
Werbung

51 Gedanken zu “Flatex: alle Dokumente herunterladen

  1. Hallo Marco,

    ja dass das Skript manchmal einfach nicht funktioniert habe ich auch gehabt. Ich habe nie herausgefunden woran es lag. Ich habe es explizit nochmal im Aritkel unter Kapitel 5 erwähnt.

    Gefällt mir

  2. Hallo Daniel,

    versuch mal was ich im neuen Teilkapitel Datenwüste beschreibe. Bei den anderen funktioniert es ja. Die Lösung mit einer für alle fixen Wartezeit ist sehr unelegant, eine elegantere Lösung zu implementieren hatte nicht funktioniert, deswegen hatte ich es so belassen.

    Gefällt mir

  3. Hallo, ich habe leider dasselbe Problem wie von Andreas am 31. Dezember 2020 geschildert.

    Ich öffne das Flatex-Dokumentenarchiv und stelle alles wie oben genannt ein.
    Noch während ich auf der Seite bin, starte ich das Script wie geschildert.
    Das Script läuft erfolgreich durch, allerdings ohne auch nur ein PDF abzurufen oder zu speichern:

    Running ‚FlatexDownloadScript‘
    1.open on /banking-flatex.at/documentArchiveListFormAction.do OK
    2.setWindowSize on 1280×720 OK
    3.storeWindowHandle on root OK
    4.selectWindow on handle=${root} OK
    5.pause on 3000 OK
    6.store on 1 with value iter OK
    7.storeXpathCount on xpath=//table/tbody/tr/td/table/tbody/tr with value rowCount OK
    echo: Number of rows is 0
    9.while on ${iter}<=${rowCount} OK
    18.end OK
    echo: Script completed successfully
    'FlatexDownloadScript' completed successfully

    Dazu öffnet sich ein Pop-Up mit dem Text "Preparing to run your test".

    Mehr passiert nicht.

    Die neuen Xpath-Verweise sind wie folgt:

    /html/body/div/form[3]/div/div/div[6]/div[2]/table/tbody/tr/td/table[2]/tbody/tr[1]/td[1]

    //*[@id="download"]

    Mir ist nicht ganz klar, wie der Schritt "Entferne nun [g]" gemeint ist – das betrifft das letzte "tr[1]".
    Soll hier nur die 1 entfernt werden, so dass "tr[]" übrig bleibt? Soll "[1]" entfernt werden?

    Hinweis: Ich nutze Flatex Österreich, danke auch für den hilfreichen Kommentar mit den Änderungen für AT!

    Gefällt mir

  4. Hallo,

    Zunächst einmal vielen Dank für das Skript selbst, tolle Idee!

    Ich habe leider dasselbe Problem wie bereits von Andreas gepostet: Das Skript läuft scheinbar erfolgreich (einmal) durch, ohne allerdings auch nur ein PDF herunterzuladen.
    Gleichzeitig öffnet sich ein Fenster mit „Preparing to run your test“. Mehr passiert nicht.

    Log:
    Running ‚FlatexDownloadScript‘
    1.open on /banking-flatex.at/documentArchiveListFormAction.do OK
    2.setWindowSize on 1280×720 OK
    3.storeWindowHandle on root OK
    4.selectWindow on handle=${root} OK
    5.pause on 3000 OK
    6.store on 1 with value iter OK
    7.storeXpathCount on xpath=//table/tbody/tr/td/table/tbody/tr with value rowCount OK
    echo: Number of rows is 0
    9.while on ${iter}<=${rowCount} OK
    18.end OK
    echo: Script completed successfully
    'FlatexDownloadScript' completed successfully

    Info: Ich versuche das Skript auf flatex.at zum Laufen zu bringen, die Änderungen für Österreich habe ich übernommen.

    Die aktuellen XPath-Verweise:

    /html/body/div[1]/form[3]/div/div/div[6]/div[2]/table/tbody/tr/td/table[2]/tbody/tr/td[1]/div
    //*[@id="download"]

    Was könnte das Problem sein?

    Gefällt mir

  5. @Tom
    Hatte auch das gleiche Problem. Scheint an dem Selenium Plugin zu hängen.
    Bei mir hat es geholfen das Browser Fenster (Preparing to run your test) was aufgegangen ist nicht zu schliessen und in dem Plugin das Script nochmal zu starten.
    In dem Browser sollte das Dokumentenarchive von Flatex erscheinen, dann sollte auch das Script funktionieren.
    Viel Glück

    Gefällt mir

  6. Hallo Manni, ja so ähnlich beschreibe ich das ja auch in der Sektion Problem beheben. Manchmal muss man es einfach mehrmals probieren und ein wenig herumspielen bis es funktioniert. Danke dass du deine Erfahrung beschreibst.

    Gefällt mir

  7. Hallo Manni,

    vielen Dank für den Hinweis, damit hat es einwandfrei funktioniert. Ich habe vorher immer alle Fenster geschlossen und komplett neugestartet…. Vielleicht kann man diesen Hinweis oben aufnehmen?

    Für Nutzer von Flatex.AT noch der Hinweis, im Pop-Up-Blocker sollte die Ausnahme natürlich für Flatex Österreich eingefügt werden: „https://konto.flatex.at“

    Gefällt 1 Person

  8. Hallo, kriege es leider nicht mehr zum laufen und leider trotz einigem Probieren auch nicht geheilt/aktualisiert

    Xpath:
    /html/body/div[1]/form[3]/div/div/div[7]/div[2]/table/tbody/tr/td/table[3]/tbody/tr[2]/td[4]/div

    Habe alle Klammern raus, nur die letzten (teilweise) usw…
    Manchmal läuft es durch ohne Fehler, z.B. bei
    html/body/div[1]/form[3]/div/div/div[7]/div[2]/table/tbody/tr/td/table[3]/tbody/tr/td[4]/div
    aber dann speichert es nix im Ordner ab.

    Wo liegt der Clue? Danke!

    Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s