Postbox-Sammeldownload ? codipodo !
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
22.08.2016 20:04 - bearbeitet 07.06.2018 11:03
Eine Funktion, die ich bei der comdirext seit langem vermisse, ist der Sammeldownload von Dokumenten aus der Postbox.
Ich habe mir deswegen ein kleines tool gebastelt, mit ich ich vollautomatisch die PDF-Dokumente aus meiner Postbox abholen kann (zumindest die Dokumente auf der ersten Seite der Postbox).
Ihr findet die aktuelle Version am Ende dieses beitrags und unter
https://github.com/dg2210/comdirect/blob/master/codipodo.rb
Es ist sofort einsatzbereit, nachdem ihr Kundennummer und PIN eingetragen habt.
Systemvorrausetzungen:
irgendetwas PC- oder Workstation-artiges mit halbwegs aktuellem Ruby-Interpreter (z. B. Version 2.0) und dazugehöriger "mechanize"-Bibliothek (Ergänzung vom 07.06.18: OpenSUSE-Anwender schalten bitte per YaST das Repository Ruby Extensions (openSUSE_Leap_42.3) ein um die "mechanize"-Bibliothek installieren zu können)
Aufruf
ruby codipodo.rb
Das Programm erwartet keine Parameter und sollte regemässig automatisch, z.B. täglich in den frühen Morgenstunden einmal aufgerufen werden.
FAQ
F: Warum Ruby? Warum "mechanize" ?
A: Ich mag es nicht, wenn ich meine Zugangsdaten einem Programm anvertrauen muss, das ich nicht verstehe. Darum war mein Hauptziel, ein kurzes, auditierbares, auch von Nicht-Experten zu verstehendes Werkzeug zu schaffen, das möglichst plattformunabhängig ist. Die "mechanize"-Bibliothek (zusammen mit dem ruby-Interpreter) erfüllt diese Anforderungen.
F: Was macht codipodo?
A: Bis Zeile 31 werden ein paar Konstanten definiert: die festen URLs der comdirect und der Ordner, in den die Dokumente gespeichert werden sollten (Voreinstellung: comdirect-postbox).
In Zeile 33 wird ein neuer Webbrowser gestartet und in Zeile 34 die Voreinstellung für den Umgang mit PDFs auf "Download" geändert.
Ab Zeile 36 gehen wir auf die Login-Seite, füllen das Formular aus und schicken es ein Zeile 41 ab.
Falls wir nicht im Persönlichen Bereich angekommen sind, beenden wir die Sache, anderfalls wechseln wir zur Postbox (Zeile 49)
In Zeile 53-56 klicken wir auf alle links, die den Text "dokumentabruf" in ihrer URL enthalten. Diese werden automatisch gespeichert (s.o.)
F: Warum lädt das codipodo nur PDF-Dateien?
A: Bei der comdirect sind Wertpapier/Ordermitteilungen als PDF hinterlegt, termingebundene Mitteilungen und Werbung aber nicht. Das tool kümmert sich nur PDFs, weil man bei den anderen Mitteilungen noch auf ein paar links klicken müsse und das tool nicht erkennen kann, ob damit evtl. unerwünsche Aktionen ausgelöst werden.
F: Warum lädt codipodo nur die erste Seite der Postbox?
A: Die "nächste Seite" Funktion der Postbox ist kein normaler link, sondern ein Stück schwarzer Javscriptmagie. Beim unvorsichtigen Umgang damit besteht die Gefahr, dass das tool in eine Endlosschleife gerät und Millionen von Anfragen an die comdirect schickt, was von deren System möglicherweise als dos-Attacke missverstanden werdenn kann. So wie es jetzt ist, terminiert das Programm nach spätestens 20 Downloads.
F: Gibt es support?
A: Falls genügend Nachfrage besteht, werde ich einen kostenpflichtigen Support anbieten.
# COmDIrect-POstfach-DOwnloader: codipodo # Dieses Programm holt die PDF-Dokumente der ersten Seite der Postbox # und legt sie im Ausgabeverzeichenis (s.u.) ab # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. require 'mechanize' # LOGINDATEN, bitte anpassen ID = "1234578" # Comdirect-Zugangsnummer PIN = "123456" # Comdirect-PIN # Ablageort der heruntergeladenen Dateien DIRECTORY="comdirect-postbox" # Feste URLs der Comdirect LOGINURL="https://kunde.comdirect.de/lp/wt/login" LOGOUTURL="https://kunde.comdirect.de/lp/wt/logout" POSTBOX_URL="https://kunde.comdirect.de/itx/posteingangsuche" SUCCESSPAGE="https://kunde.comdirect.de/itx/persoenlicherbereich/anzeigen?execution=e1s1" @agent = Mechanize.new @agent.pluggable_parser.pdf = Mechanize::DirectorySaver.save_to(DIRECTORY, :overwrite => true) @agent.get(LOGINURL) do |page| login_result = page.form_with(:name => 'login') do |log| log.add_field!("loginAction", "loginAction") log.param1= ID log.param3 = PIN end.click_button # Sind wir auf der richtigen Seite gelandet?" if login_result.uri.to_s != SUCCESSPAGE puts "Login fehlgeschlagen, aktuelle URL: #{login_result.uri.to_s}" break end @agent.get(POSTBOX_URL) # Nur Eintraege, deren URL "/dokumentenabruf/" enthält, abholen, # d.h. Werbung oder andere nicht-downloadbare Elemente überspringen @agent.page.links_with(:href => /dokumentenabruf/).each do |link| link.click end end @agent.get(LOGOUTURL)
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
am 23.08.2016 12:06
Hallo dg2210,
da hast du dir bestimmt einige Mühe gemacht. Prima!
Nur der Vollständigkeit halber möchten wir ergänzen, dass diese Anwendung nicht von uns ist und wir für die Funktionstüchtigkeit dieses Programms sowie die Sicherheit der Zugangsdaten keinerlei Gewährleistung übernehmen.
Es sieht so aus, als ob die Zugangsdaten vom Programm unverschlüsselt auf dem Rechner abgelegt werden. Daher regen wir an für eine Verschlüsselung zu sorgen, um die Daten vor Ausspähung zu schützen. Mit einem kostenpflichtigen Support hätte dein Angebot übrigens den Geschmack eines gewerblichen Angebots. Vielleicht kannst du darüber ja nochmal nachdenken?
Gruß aus Quickborn,
Erik
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
am 23.08.2016 13:10
SMT_Erik schrieb:Verschlüsselung zu sorgen, um die Daten vor Ausspähung zu schützen. Mit einem kostenpflichtigen Support hätte dein Angebot übrigens den Geschmack eines gewerblichen Angebots. Vielleicht kannst du darüber ja nochmal nachdenken?
Hallo @SMT_Erik,
gerne stelle ich das klar: falls es einen Support geben sollte, dann wird er so teuer, dass ich mir davon eine Sperrminorität bei der Comdirect AG kaufen kann. Dann lasse ich mich in den comdirect Aufsichtsrat wählen und bekomme in dieser Community einen eigenen "Aufsichtsrat"-Avatar.
- Tags:
- Aufsichtsrat
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
am 23.08.2016 13:13
dg2210 schrieb:
Hallo @SMT_Erik,
gerne stelle ich das klar: falls es einen Support geben sollte, dann wird er so teuer, dass ich mir davon eine Sperrminorität bei der Comdirect AG kaufen kann. Dann lasse ich mich in den comdirect Aufsichtsrat wählen und bekomme in dieser Community einen eigenen "Aufsichtsrat"-Avatar.
Das zumindest klingt nach einem Plan!
Gruß,
Erik
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
24.03.2018 10:03 - bearbeitet 24.03.2018 10:04
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
am 11.11.2018 12:34
Hi dg2210,
danke für die Mühe für das Script!
Benutzt du das noch?
Bei mir werden alle PDFs doppelt heruntergeladen.
Einige haben auch die Endung .pdf, aber die meisten haben die Endung .pdf_selectEntryId=9, wobei die letzte Zahl immer anders ist.
Die Dublette hat jeweils keine Endung.
Beispiel:
Ertragsgutschrift_0330_St._WKN_ETF701
Ertragsgutschrift_0330_St._WKN_ETF701(CS_VERMOEG.STRATE.U.ETF_I)_vom_31.10.2018522983.pdf_selectEntryId=8
Kann man da etwas machen?
Ich kann zwar kein Ruby aber ich arbeite mich gerne ein.
Um das Passwort nicht im Klartext zu speichern frage ich es per Eingabe ab.
Ich hole mir die PDFs eh nur nach der Mail-Benachrichtigung ab:
require "highline/import"
PIN = ask "Passwort: "
12.11.2018 09:48 - bearbeitet 12.11.2018 09:49
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
12.11.2018 09:48 - bearbeitet 12.11.2018 09:49
Hallo @FloHallo,
danke für die Rückmeldung.
Ja, ich benutze codipo wöchentlich und ich habe den doppel-Download-Fehler bei mir zu Hause schon seit langem beseitigt, aber vergessen, es hier in der community zu kommunizieren. Das hole ich bald nach.
Hintergrund:
Seit der letzten Postbox-Umstellung haben ungelesene und gelesene Dokumente unterschiedliche URLs (der selectEntry-Teil)
Das man man dadurch verifizieren, daß man die ungelsenen Dokumente in der Postbox anklickt, danach werden sie von codipo normal (einfach) heruntergeladen.
Workaround:
codpipo aufrufen, Dokumente werden doppelt heruntergeladen
alle heruntergeladenen Dokumente löschen
codipo nochmal aufrufen
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
am 12.11.2018 11:02
Hier die notwendigen Änderungen:
a) Die Zeile
@agent.pluggable_parser.pdf = Mechanize::DirectorySaver.save_to(DIRECTORY, :overwrite => true)
bitte löschen
b) Den Block nach dem Kommentar "Nur Eintraege..." bis zum Ende ersetzen durch
# Nur Eintraege, deren URL "/dokumentenabruf/" enthält, abholen, # d.h. Werbung oder andere nicht-downloadbare Elemente überspringen @agent.page.links_with(:href => /dokumentenabruf/).each do |link| filename = link.href.split('/')[-1] if idx = filename.rindex(".pdf") filename = filename[0..(idx+3)] end path = File.join DIRECTORY, filename result = link.click.save! path end end @agent.get(LOGOUTURL)
Was macht das?
Statt dem eleganten "link.click" holen wir uns manuell den Dateinamen aus dem href-element, suchen nach der Zeichenfolge ".pdf" und schneiden alles, was dahinter steht, ab.
Dann basteln wir uns den vollständigen Dateinamen uns speichern manuell ab.
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
am 19.11.2018 19:16
Hi dg2210,
vielen Dank für die schnelle Antwort.
Ich probier das demnächst mal aus.
Ich probiere dann auch, ob man die Postbox auch gleich Löschen und Archivieren kann.
Mal sehen, ob ich das hinbekomme 😄
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
am 20.11.2018 11:39
@FloHallo schrieb:Ich probiere dann auch, ob man die Postbox auch gleich Löschen und Archivieren kann.
Mal sehen, ob ich das hinbekomme 😄
Viel Glück dabei! Ich habe es aufgegeben, weil zu viel "schwarze Java-Script Magie" im Spiel ist.
