Kategoria: Programowanie

mBank skrypt do zautomatyzowanego pobierania wyciagu z konta

2009 Wrzesień 25 – 18:04

-> NOWA WERSJA SKRYPTU <-

Moze sie komus przyda skrypt do zautomatyzowanego logowania i pobierania wyciagu z konta z banku mBank. Na nieszczescie brakuje takiej funkcj w mBanku, a przysylanie mejli po dwoch dniach, ktore potem rowniez ciezko sparsowac nie rozwiazuje problemu.

Logowanie, sciaganie codziennie recznie wyciagu w CSV i parsowanie go, to tez nie rozwiazanie. Takwiec stwierdzilem ze napisze skrypt ktory robi to sam.

I tak powstal:

mBank auto skrypt v1.2 v1.5 v1.6.3 v2.0.1 v2.0.3 v2.0.4 v2.0.5 v2.1.0 v2.2.0

Skrypt automatycznie pobiera wyciag ze wszystkich kont bankowych zalogowanego uzytkownika. Mozna rowniez wybrac pojedyncze konto ktore ma byc monitorowane.

Bardzo przydatny do integracji z programami ksiegowymi itp. Przy odpowiednich zmianach moze wysylac mejle, albo zapisywac transakcje w bazie danych.

Instalacja i wymagania

Krotka instrukcja instalacji:

  • plik skryptu wgrac do dowolnego katalogu
  • z powodow bezpieczenstwa katalogowi i skryptowi nadac prawa odczytu tylko dla wlasciciela
  • podac uzytkownika i haslo do mbanku, z powodow bezpieczenstwa jest zakodowane base64
    UWAGA: podajac prawdziwy login, nalezy podawac prawdziwe haslo !!!
    3 bledne logowania powoduja zablokowanie dostepu do konta !!!
    Trzeba potem odblokowywac przez telefon 😉
  • mozna ustawic zmienna „wybrane” na jedno z kont ktore ma byc monitorowane, np:
    wybrane = ‚xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx’
    jesli zmienna jest zostawiona pusta, skrypt wyswietla wszystkie konta tego uzytkownika, np:
    wybrane = ”
  • jako zakodowac haslo i uzytkownika base64 ?
    mozna uzyc dowolnego base64 calculator z googli
    albo ponizszej funkcji pythona
    print ‚nasze_haslo’.encode(‚base64’)

Program wymaga:

  • python
  • python-mechanize
    (w debianie to paczki „python” i „python-mechanize”)

Bezpieczenstwo i gwarancje

Uzywanie na wlasna odpowiedzialnosc !!!
Uzywajac programu zgadzasz sie na to ze nie ponosze odpowiedzialnosci za za zadne szkody ktore moga powstac uzywajac tego skryptu.

Gwarantuje jednak ze moj oryginalny kod nie zawiera zadnych spyware, zadnych metod podgladania i przechwytywania czulych danych. Mozna to oczywiscie zobaczyc przegladajac krociutki kod.
Aby zwiekszyc bezpieczenstwo, niektore pola i zmienne sa zakodowane base64. To uniemozliwia bezposrednie odczytanie lub znalezienie hasel w pliku. Nie daje to jednak calkowitej gwarancji ze ktos po przechwyceniu zakodowanego hasla, po prostu go nie odkoduje (to nie hash jednokierunkowy, jedynie kodowanie base64).

Historia wersji

  • v0.1 dziala
  • v0.2 zakodowane hasla base64
    nie daja calkowitego bezpieczenstwa !
    zabezpieczaja jedynie przed podejrzeniem hasla przy przegladaniu kodu
  • v0.3 listowanie kont
  • v0.4 listowanie transakcji dla kazdego konta
  • v1.0 oczyszczenie kodu, definicje
  • v1.1 mozliwosc wybrania pojedynczego konta do listowania
  • v1.1 uzyskiwanie numeru transakcji
  • v1.2 opisy i instrukcje
  • v1.3 wybor rodzaju transakcji po numerze typu, mozliwosc wielokrotnego wyboru (regexp)
  • v1.4 wybor konta, mozliwosc wielokrotnego wyboru (regexp), wiecej pol transakcji
  • v1.5 usuwanie wielokrotnych spacji, oczyszczanie stringow, czytelniejsze domyslne wyswietlanie
  • v2.0.1 skrypt dostosowany do nowego interfejsu mBanku !!!
    UWAGA: jedynie dwie glowne funkcje (get_konta i get_trans) zostaly zmienione, kolejnosc zmiennych, sposob wyswietlania jest identycznie jak bylo, co powinno ulatwic update zaimplementowanego skryptu (wystarczy podmienic te dwie fukcje ;D)
  • v2.0.3 wyswietlanie „dostepnych srodkow” i waluty konta
  • v2.0.4 skrypt akceptuje ujemny stan konta
  • v2.0.5 dostosowanie do zmian w mbanku
  • v2.1.0 znowu mozna wybrac typy transakcji oraz mozna okreslic okres wyswietlania wstecz
  • v2.1.1 drobne poprawki i optymalizacje
  • v2.2.0 skrypt sciaga cala liste transakcji nawet jak jest rozbita w mbanku na pare stron

Ponizszy kod jest tylko podany informacyjnie, wyrazenia regularne nie sa za dobrze trawione przez WordPressa tak wiec najlepiej sciagnij kod w pliku powyzej.

SCIAGNIJ SKRYPT w wersji v2.0.5
SCIAGNIJ SKRYPT w najnowszej wersji


	    

	    
  1. 28 komentarzy to “mBank skrypt do zautomatyzowanego pobierania wyciagu z konta”

  2. Super skrypt .. działający. Ja poddałem się przy wersji pod PHP 🙂
    Przy próbie zapisu do pliku (lub innych operacji) wywala błąd:
    ~# python mbank_auto_skrypt_v163 > aaa
    Traceback (most recent call last):
    File „mbank_auto_skrypt_v163″, line 248, in
    print ” -> „+transa[2].ljust(4, ‚ ‚)+” „+transa[0]+” „+transa[3]+” „+transa[6].ljust(26,’ ‚)+” „+transa[8].rjust(10,’ ‚)+” „+transa[5]
    UnicodeEncodeError: ‚ascii’ codec can’t encode character u’\xd3′ in position 116: ordinal not in range(128)

    By NieF on Mar 21, 2009

  3. Faktycznie !
    Tzn to co sie wyswietla to moje domyslne ustawienie, nikogo do niego nie zmuszam 😀 Celem jest jakies polaczenie tego np z baza mysql, a nie samo wyswietlanie 🙂 Tak wiec lepiej „operacje” itp lepiej przeprowadzac w pythonie.
    Zeby naprawic zapisywanie strumienia do pliku nalezy zamienic linie:
    print ” -> „+transa[2].ljust(4, ‚ ‚)+” „+transa[0]+” „+transa[3]+” „+transa[6].ljust(26,’ ‚)+” „+transa[8].rjust(10,’ ‚)+” „+transa[5]
    na
    print (” -> „+transa[2].ljust(4, ‚ ‚)+” „+transa[0]+” „+transa[3]+” „+transa[6].ljust(26,’ ‚)+” „+transa[8].rjust(10,’ ‚)+” „+transa[5]).encode(„utf8”)

    I tak samo, dla bezpieczenstwa linia:
    print „—> „+konto[2]+” „+konto[3].rjust(10, ‚ ‚)+” „+konto[1]
    ma byc zastapiona przez:
    print („—> „+konto[2]+” „+konto[3].rjust(10, ‚ ‚)+” „+konto[1]).encode(„utf8”)

    Wtedy z pliku wyjedzie normalny utf8 (naturalnie w encode mozna wpisac dowolne wyjsciowe kodowanie znakow).

    By Yunnan on Mar 21, 2009

  4. Dzięki, teraz gra i buczy 🙂

    By NieF on Mar 23, 2009

  5. Udało się komuś stworzyć nowe „magiczne regexp’y” do poprawnej pracy skryptu po ostatnich zmianach w panelu mbanku?:)

    By NieF on Cze 17, 2009

  6. Próbuję dostosować skrypt do ostatnich zmian i nie daję rady. Może któs pomóc?

    By Mati on Cze 19, 2009

  7. Rowniez zauwazylem zmiany. Jesli sposob logowania sie nie zmienil, to nie powinno byc problemu. Postaram sie to niedlugo naprawic.

    By Yunnan on Cze 21, 2009

  8. Poprawił może ktoś już ten skrypt? Udało mi się zrobić pobieranie listy rachunków, ale gdy przechodzę do wczytywania transakcji to pojawia się error.

    By Mario on Lip 2, 2009

  9. Kiedy można się spodziewać poprawek do skryptu? Bo niestety po zmianach w mBanku skrypt przestał działać…

    By Tomek on Lip 13, 2009

  10. Poprawek mozna sie spodziewac TERAZ ! 😀
    Chwile mi to zajelo, szczegolnie walka z „delikatnie” zmieniona kolejnoscia przy listowaniu transakcji. U mnie wszystko dziala tak jak przedtem. Co wazniejsze, tylko funkcja get_konta i get_trans zostaly zmienione ! Reszta jest identycznie jak bylo !

    By Yunnan on Lip 13, 2009

  11. Niech Ci Bóg w dzieciach wynagrodzi 🙂

    By Piotrek on Lip 13, 2009

  12. Z wpisu wnioskuje ze dziala 😀
    Skrypt wyswietla transakcje z ostatnich 14 dni, bo tak jest teraz domyslnie w mBanku. Wydaje mi sie ze przed zmiana byl to 1 miesiac, ale nie jestem pewien. Pisze zeby sie ktos nie zdziwil 😉

    By Yunnan on Lip 14, 2009

  13. Hej, udało mi sie to odpalić ale:
    jak jest wpisane .* – to pokazuje tylko jedno konto (mam3) a jak wskaze konkretne eKonto to pokazuje:===> Znalezione konta: 0

    Da się coś w temacie zrobić?

    By pa on Wrz 9, 2009

  14. Witam,
    a czy logowanie i wylogowanie przebiega poprawnie ?
    Na pierwszy test sprobuj wykomentowac/usunac linijki response_get.seek(5000) oraz response_get.seek(20000).
    Jesli mozesz, to podaj jakie to typy kont (ja testowalem na mBiznes, eKonto oraz eMax Plus, dziala dobrze).
    Pozdr

    By Yunnan on Wrz 20, 2009

  15. Witam,

    Tak wszystko jest poprawnie.
    Wiem na czym polega problem.

    Na ekoncie mam uruchomiony limit kredytowy i jest kwota ujemna, a drugie konto ktorego nie pokazuje to kredyt gotówkowy – wniosek z tego taki, ze nie pokazuje minusów, jedno konto na którym mam plus pokazuje dobrze(emax)

    By pa on Wrz 25, 2009

  16. Witam,
    skrypt poprawiony v2.0.4, juz pokazuje ujemny stan konta. Niestety kredytu gotowkowego nie wyswietla, bo nie wiem jak wyglada kod HTML od takiego kredytu.

    By Yunnan on Wrz 25, 2009

  17. Witam, Skrypt działa super ale omija mi konta mBiznes. Pozostałe pokazuje poprawnie.

    By graby on Lis 18, 2009

  18. Po ostatnich weekendowych zmianach mBanku skrypt nie działa poprawnie.

    By Adam on Lis 25, 2009

  19. Czy ten skrypt nadal działa?
    Kiedyś mi chodził ale jak teraz do niego wróciłem to nie wykrywa mi żadnego konta a mam 4.

    By shajen on Lis 26, 2009

  20. Witam,

    od jakiegoś czasu (ok. 2-3 tyg) przestał mi działać skrypt wraz z moim powiadomieniem na SMS – widać, że chyba coś się zmieniło na stronie mbanku. Loguje się ok, ale nie znajduje kont – „Znalezione konta: 0”. Zrobiłem aktualizację skryptu z v2.0.1 na v2.0.4 ale problem pozostał ten sam.

    Mogę wysłać jakiś debug, tylko za dobrze nie znam pythona, więc prosiłbym o jakieś wskazówki..

    By Tomek on Lis 27, 2009

  21. Witam,
    Niestety już od ok. 2-3 tyg skrypt przestał działać – nie znajduje kont. Zacząłem grzebać w skrypcie i zdiagnozowałem, że przyczyną jest zły filter regexp (obiekt sz_konto) – prawdopodobnie z powodu zmian na stronach mBanku. Po usunięciu fragmentu ze stringiem „bLast14=…”, konta zaczęły być znajdowane, ale nie widać transakcji. Niestety nie miałem już siły i czasu, by dalej drążyć temat.
    Wraz z zainteresowanymi kolegami, liczę na kolejną autorską wersję skryptu. Dodam, że używamy skryptu do darmowego całodobowego monitorowania kont, w połączeniu z innym skryptem do wysyłania SMSów informujących o transakcjach.

    Pozdr. Tom.

    By Tomek on Lis 28, 2009

  22. Witam,
    wlasnie zauwazylem ze skrypt nie dziala, w sumie nie wiem co sie zmienilo w wygladzie, ale zmiany w kodzie sa powazne. Wlasnie pisze nowe wyrazenia regularne, powinny byc gotowe za pare dni. Zarowno lista kont jak i transakcji zostala zmieniona. Na pierwszy rzut oka zauwazylem ze nie ma juz typow transakcji (oznaczonych numerami), jedynie sa opisy tekstowe, takie jak wczesniej.
    Dzieki za zainteresowanie skryptem 🙂 Ciesze sie ze sie przydaje.
    Pozdr
    J

    By Yunnan on Lis 30, 2009

  23. Witam,
    skrypt zostal poprawiony i dziala u mnie, zmiana dotyczyla jedynie wyrazen regularnych. Kolejnosc zmiennych nie powinna sie zmienic. Odpadla zmienna okreslajaca typ operacji, mbank jej juz nie podaje.
    Nie testowalem skryptu bardzo dokladnie, wiec przydalby sie feedback 🙂
    Pozdr
    J

    By Yunnan on Gru 2, 2009

  24. witam,
    wszystko dziala, super sprawa 🙂
    przydala by sie jeszcze obsloga
    formularza „Kryteria wyświetlania operacji wykonanych” mozna by zdefiniowac tam typ operacji, albo co wazniejsze ustawic daty od – do
    ogolnie kawal dobrej roboty, za ktora wielkie dzieki 🙂

    By astar on Gru 5, 2009

  25. Swietnie, ciesze sie ze dziala. Mbank usunal wewnetrzna numeracje typow operacji, ale faktycznie to przydatna funkcja.
    Co do dat od-do, to popatrze, narazie mozna wybrac przedzial wstecz, to chyba najistotniejsze.

    By Yunnan on Gru 5, 2009

  26. Witam,

    Od 2 dni mam dosyć częsty problem, że skrypt poprawnie wyświetla informacje o stanie ekonta, dochodzi do pierwszego konta eMax, a czasem nawet drugiego i wisi. Niekiedy odwiesza się po ok. 2-3 min i poprawnie wyświetla resztę, a innym razem kończy się błędem, jak poniżej. Nie jestem pewien, czy to błąd skryptu, czy jakieś przejściowe problemy na stronach mbanku. Nie wygląda to na problem łącza, bo zwykła przeglądarka WWW pracuje bez w/w zacięć.

    Traceback (most recent call last):
    File „./mbank.sh”, line 297, in
    trans = get_trans(konto[0], wybor_typ)
    File „./mbank.sh”, line 232, in get_trans
    br[„lastdays_period”] = [str(wybor_period)]
    File „/usr/lib/python2.5/site-packages/ClientForm.py”, line 2895, in __setitem__
    control = self.find_control(name)
    File „/usr/lib/python2.5/site-packages/ClientForm.py”, line 3222, in find_control
    return self._find_control(name, type, kind, id, label, predicate, nr)
    File „/usr/lib/python2.5/site-packages/ClientForm.py”, line 3306, in _find_control
    raise ControlNotFoundError(„no control matching „+description)
    ClientForm.ControlNotFoundError: no control matching name ‚lastdays_period’

    By Tomek on Gru 11, 2009

  27. Pojawila sie nowa wersja skryptu, zapraszam do uzywania !

    By Yunnan on Lut 28, 2010

  28. Wow dzięki za pro poradnik 😀 Nie wiedziałem, że w ogóle coś takiego istnieje, a poza tym skrypty dla mnie to totalny matrix. Teraz już wszystko czaję 🙂

    By Arek on Lip 17, 2012

  1. 1 Trackback(s)

  2. Cze 8, 2010: mBank powiadamianie sms » Tytanick website

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *