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
#!/usr/bin/env python # coding: utf8 #-############################################# # mBank_auto_skrypt v2.2.0 # Made by Jedrzej Schmeidel (Yunnan) # on 2009/02 # www.yunnan.tk # yunnan@yunnan.tk #-## LICENCJA # Creative Commons License - Attribution, Share Alike # http://creativecommons.org/licenses/by-sa/2.5/pl/ # WOLNO: Kopiowac, rozpowszechniac, odtwarzac i wykonywac utwor. # WOLNO: Tworzyc utwory zalezne. # WARUNEK: Uznanie autorstwa. # WARUNEK: Na tych samych warunkach. #-## OPIS # Skrypt do zautomatyzowanego uzyskiwania wyciagu # z kont mBanku. # Bardzo przydatny do integracji z programami ksiegowymi itp. # Przy odpowiednich zmianach moze wysylac mejle, albo zapisywac # transakcje w bazie danych. # SKRYPT WYSWIETLA transakcje przychodzace i wychodzace # SKRYPT WYSWIETLA oplatydodatkowe (prowadzenie konta, przelew, oplaty za przelewy, stale zlecenia, podatek od odsetek itp) #-## HISTORIA # v0.1 dziala # v0.2 zakodowane hasla base64 # nie daja calkowitego bezpieczenstwa ! # zabezpieczaja jedynie 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 # v1.6 przechwytywanie bledow # v1.6.1 argument read byl za maly i nie wszystkie konta sie odczytywaly # v1.6.2 poprawki instrukcji i opisu # v1.6.3 dodatkowe opisy transakcji # v1.6.4 wyswietlanie w "prawdziwym" utf8 # v2.0.0 wersja dostosowana do nowego interfejsu mBanku # UWAGA: Tylko funkcje get_konta i get_trans zostaly zmienione i tylko je nalezy zaktualizowac # czyli jesli ktos uzywa tego skryptu jako modulu, wystarczy ze zamieni te dwie fukcje, a output # jest identyczny (komorki sa numerowane tak samo i sposob wyswietlania jest taki sam) # v2.0.1 drobny blad przy logowaniu (dziwna niepotrzebna komorka None=) # v2.0.2 get_konta: zmienna nr 3 to "saldo" konta, dodano zmienna 5, czyli "dostepne srodki" # v2.0.3 zmiana wyswietlania, obok salda dodano walute oraz w nawiasie wyswietlane sa "dostepne srodki" # UWAGA: dostepne srodki zawieraja zablokowane srodki (wykonane ale nie zaksiegowane transakcje) oraz odnawialne kredyty # v2.0.4 skrypt akceptuje ujemny stan konta # v2.0.5 mBankowcy znowu cos zmieniali, musialem przepisac regexpy # UWAGA: numeryczny kod transakcji nie jest juz podawany przez mBank, tak wiec filtrowanie po tym numerze nie dziala ! # UWAGA: tylko funkcje sz_konto, sz_trans1, sz_trans2 i sz_trans3 sie zmienily !!! wystarczy je podstawic # v2.1.0 znowu mozna wybierac rodzaje operacji, teraz przebiega to przez system mbanku uzywajac ich trzyliterowych kodow # mozna wybierac dowolny okres do wyswietlenia wstecz # wybieranie przedzialu bedzie w nastepnej wersji# v2.1.1 dodane pauzy na czekanie na odpowiedz # sa podejrzenia ze za szybkie zapytania do serwera byly powodem sporadycznych timeoutow # v2.1.2 drobne poprawki, optymalizacja sleepow, chyba bylo ich za duzo
# v2.2.0 sciaganie calej listy transakcji, nawet jak jest na paru stronach #-## TODO # wykrywanie kredytu gotowkowego #-## Instalacja i uruchomienie # - program wymaga Python i Python-Mechanize # (w debianie to paczki "python" i "python-mechanize") # - 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: # wybor_konto = '(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)' # jesli zmienna jest '(.*)', skrypt wyswietla wszystkie konta tego uzytkownika, np: # wybor_konto = '(.*)' # zwykle wyrazenie regularne # - mozna wybrac tylko okreslone transakcje do wyswietlenia # ALL - Wszystkie # ABO - Uznania rachunku # CAR - Obciążenia rachunku # TRI - Przelewy przychodzące # TRO - Przelewy wychodzące # TUS - Przelewy podatkowe # TRZ - Przelewy do ZUS # LDS - Operacje kartowe # CRE - Operacje na kredycie # CAI - Wpłaty gotówkowe # CAO - Wypłaty gotówkowe # INT - Kapitalizacja odsetek # COM - Prowizje i opłaty # - jak zakodowac haslo i uzytkownika base64 ? # mozna uzyc dowolnego base64 calculator z googli # albo ponizszej funkcji pythona #print 'nasze_haslo'.encode('base64') #-## Integracja i edycja # - program zostal napisany w Linuxie, tak wiec mozna go dowolnie zintegrowac w Linuxie # - aby uruchomic program w Windowsie potrzebny jest Python do windowsa z pakietem Mechanize # ODRADZAM uzywania go na Windowsie, z powodu latwego dostepu do wszystkich plikow i zapisanych w nich hasel # nalezy posiadac zaufany komputer, najlepiej tylko z jednym (wlasnym) kontem uzytkownika # - funkcje podaja tablice z numerami kont oraz odpowiednio wyciag z konta # tablica moze byc w dowolny sposob przetworzona i wyswietlona, wyslana mejlem, lub zapisana do bazy # python w prosty sposob oferuje te wszystkie mozliwosci # - skrypt mozna bez problemu uruchamiac cronem # - pola danych sa wziete bezposrednio ze strony, tak wiec ich kolejnosc jest podobna jak na stronie # tabela z informacjami o koncie ma 6 pol # 0 - zmienna POST, niezbedna do uzyskania wyciagu, raczej nieczytelna
# 1 - nazwa konta # 2 - numer konta # 3 - saldo # 4 - waluta # 5 - dostepne srodki # tabela z informacjami o transakcji ma 11 pol # 0 - data wydania polecenia transakcji # 1 - data wykonania polecenia transakcji # 2 - wewnetrzny systemowy numer transakcji, transakcje numerowane kolejno # 3 - numer oznaczajacy rodzaj transakcji (opisane ponizej) - NIEAKTUALNE ! NUMERYCZNY TYP TRANSAKCJI NIE JEST JUZ PODAWANY PRZEZ MBANK # 4 - slownie rodzaj transakcji # 5 - druga strona bioraca udzial w transakcji # 6 - numer konta drugiej strony bioracej udzial w transakcji (w niektorych przypadkach pusty) # 7 - tytul przelewu/transakcji # 8 - kwota transakcji # 9 - saldo po transakcji # 10- waluta transakcji #-## 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. ############# KONFIGURACJA #user zakodowany base64 Y3VzdG9tZXI = '' #haslo zakodowane base64 cGFzc3dvcmQ = '' #wybrane konta, aby wyswietlic wszystkie konta (.*), aby wyswietlic wybrane (xxx|xxx) znak | to znak OR #wybor_konto = '(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)' wybor_konto = '(.*)' # kryteria wyswietlania operacji # wybor_typ => rodzaje operacji opisane wyzej - ALL, ABO, CAR, TRI, TRO, TUS, TRZ, LDS, CRE, CAI, CAO, INT, COM wybor_typ = 'ALL' # wybor_period => okres - D dzien, W tydzien, M miesiac # wybor_numer => liczba dni, miesiecy, tygodni, czyli np wybor_numer 1 i wybor_period M to jeden miesiac wybor_period = 'D' wybor_numer = '14' ############# #rangepanel_group=[daterange_radio, *lastdays_radio, lastlogin_radio])> #wybor_data_od = '20091101' #wybor_data_do = '20091203' #### import time import re import sys from mechanize import Browser from urllib import urlencode from urllib2 import Request #-############################################# # Program #-############################################# def strip_space(value): #oczyszczanie ze spacji return re.sub(r'\ ', '', value) def strip_dspace(value): #usuwanie podwojnych niepotrzebnych spacji z tekstu return re.sub(r'\ [\ ]+', ' ', value) def get_konta(value='(.*)'): time.sleep(1) response_get = br.open("https://www.mbank.com.pl/accounts_list.aspx") # otwarcie listy kont # response_get.seek(5000) strona = response_get.read().decode('iso8859-2') strona = re.sub(r'<li>|</li>', '\n', strona) # magiczny regexp przed 2009.11 #sz_konto = re.compile('\'account_details.aspx\',\'\',\'POST\',\'[^<]+href="#">([^0-9<]+)\ ([0-9\ ]+)</a>.*(bLast14=[^\']+).*\ href="#">([0-9-,\ ]+)\ ([A-Z]{3})</a></p><p class="Amount">.*">([0-9-,\ ]+)\ [A-Z]{3}</span></p><p class="Actions">') # magiczny regexp po 2009.11 sz_konto = re.compile('\'account_details.aspx\',\'\',\'POST\',\'[^<]+href="#">([^0-9<]+)\ ([0-9\ ]+)</a>.*\'account_oper_list.aspx\',\'\',\'POST\',\'([^\']+)\'[^<]+href="#">([0-9-,\ ]+)\ ([A-Z]{3})</a></p><p class="Amount">.*">([0-9-,\ ]+)\ [A-Z]{3}</span></p><p class="Actions">') r_konta = [] for konto_temp in list(sz_konto.findall(strona)): konto_temp = list(konto_temp) # odwracanie zmiennych, zeby zachowac kolejnosc temp = konto_temp[2] konto_temp[2] = konto_temp[1] konto_temp[1] = konto_temp[0] konto_temp[0] = temp # konto_temp[2] = strip_space(konto_temp[2]) konto_temp[3] = strip_space(konto_temp[3]) konto_temp[5] = strip_space(konto_temp[5]) if re.match(value, str(konto_temp[2])): r_konta.append(konto_temp) return r_konta def get_trans(value='', valuea='ALL'): time.sleep(1) br.open("https://www.mbank.com.pl/accounts_list.aspx") # powrot na liste kont # magiczny regexp sz_grep = re.compile('<p class="Date"><(.*\n)') # magiczny regexp przed 2009.11 #sz_trans1 = re.compile('span>([0-9-]+)</span><span>([0-9-]+)</span>.*iNumber=([0-9]+).*cCodeOper=([0-9]+).*href="#">([^<]+)</a><span>([^<]+)</span><span>([0-9]+)</span><span>([^<]+)</span>.*">([0-9-\ ,]+)\ [A-Z]+</span></p>.*">([0-9-\ ,]+)\ ([A-Z]+)</span></p>\n') #sz_trans2 = re.compile('span>([0-9-]+)</span><span>([0-9-]+)</span>.*iNumber=([0-9]+).*cCodeOper=([0-9]+).*href="#">([^<]+)</a><span>([^<]+)</span></p>()().*">([0-9-\ ,]+)\ [A-Z]+</span></p><p class="Amount">.*">([0-9-\ ,]+)\ ([A-Z]+)</span></p>\n') #sz_trans3 = re.compile('span>([0-9-]+)</span><span>([0-9-]+)</span>.*iNumber=([0-9]+).*cCodeOper=([0-9]+).*href="#">([^<]+)</a>()()().*">([0-9-\ ,]+)\ [A-Z]+</span></p><p.*">([0-9-\ ,]+)\ ([A-Z]+)</span></p>\n') # magiczny regexp po 2009.11 sz_trans1 = re.compile('_0_0">([0-9-]+)</span><span[^<]+_0_1">([0-9-]+)</span><.*MCheckBox_[0-9]+_1_([0-9]+)" />().*href="#">([^<]+)</a><span>([^<]+)</span><span>([^<]+)</span><span>([^<]+)</span>.*">([0-9-\ ,]+)\ [A-Z]+</span></p>.*">([0-9-\ ,]+)\ ([A-Z]+)</span></p>\n') sz_trans2 = re.compile('_0_0">([0-9-]+)</span><span[^<]+_0_1">([0-9-]+)</span><.*MCheckBox_[0-9]+_1_([0-9]+)" />().*href="#">([^<]+)</a><span>([^<]+)</span><span>([^<]+)</span>()</p><p.*">([0-9-\ ,]+)\ [A-Z]+</span>.*">([0-9-\ ,]+)\ ([A-Z]+)</span></p>\n') sz_trans3 = re.compile('_0_0">([0-9-]+)</span><span[^<]+_0_1">([0-9-]+)</span><.*MCheckBox_[0-9]+_1_([0-9]+)" />().*href="#">([^<]+)</a><span>([^<]+)</span>()()</p><p.*">([0-9-\ ,]+)\ [A-Z]+</span>.*">([0-9-\ ,]+)\ ([A-Z]+)</span></p>\n') sz_next = re.compile('button\ id="PrevPage"\ onclick="doSubmit\(\'\',\'\',\'\',\'(.*)\',true,false,true,null\);return false"\ class="button">Poprzednie') # przejscie do konta submit = [] for form in br.forms(): for forma in form.controls: submit.append((forma.name, forma.value)) submit[0] = ('__PARAMETERS', value) none = None, '' while submit.count(none)>0: submit.remove(none) submitstr = urlencode(submit) # zbieranie danych do POST br.open("https://www.mbank.com.pl/account_oper_list.aspx", submitstr) # strona z kontem, teraz istnieje mozliwosc filtrowania operacji br.select_form(name="MainForm") # br["daterange_from_day"] = '21' # br["daterange_from_month"] = '11' # br["daterange_from_year"] = '2009' # br["daterange_to_day"] = '5' # br["daterange_to_month"] = '12' # br["daterange_to_year"] = '2009' br["lastdays_period"] = [str(wybor_period)] br["lastdays_days"] = str(wybor_numer) br["accoperlist_typefilter_group"] = [str(wybor_typ)] response_get = br.submit() # zbieranie danych do klikniecia guzika Poprzednie operacje strona = '' stronatmp = response_get.read() while sz_next.findall(stronatmp).__len__() == 1: strona = strona+stronatmp submit = [] for form in br.forms(): for forma in form.controls: submit.append((forma.name, forma.value)) trans_next = sz_next.findall(stronatmp) submit[0] = ('__PARAMETERS', trans_next) while submit.count(none)>0: submit.remove(none) submitstr = urlencode(submit) # zbieranie danych do POST submitstr = re.sub(r'\%5B|\%5D|\%27|\&account[^=]+=', '', submitstr) response_get = br.open("https://www.mbank.com.pl/account_oper_list.aspx?",submitstr) stronatmp = response_get.read() ### strona = strona+stronatmp strona = strona.decode('iso8859-2') # print strona strona = re.sub(r'\|<wbr />', '', strona) strona = re.sub(r'</li>|<li class="alternate">|<li>', '\n', strona) # print strona r_trans = [] for trans_html in sz_grep.findall(strona): trans_temp = sz_trans1.findall(strip_dspace(trans_html)) if trans_temp.__len__() == 0: trans_temp = sz_trans2.findall(trans_html) if trans_temp.__len__() == 0: trans_temp = sz_trans3.findall(trans_html) if trans_temp.__len__() == 1: # and re.match(valuea, str(trans_temp[0][3])): trans_temp = list(trans_temp[0]) trans_temp[8] = strip_space(trans_temp[8]) trans_temp[9] = strip_space(trans_temp[9]) r_trans.append(trans_temp) #if trans_temp.__len__() == 0: #print "Rodzaj nieznany"+trans_html return r_trans #-########mBank##################################### print "===> Uruchomienie wersja mBank_auto_skrypt v2.2.0" br = Browser() # uruchomienie przegladarki # ewentualny debugging #br.set_debug_redirects(True) #br.set_debug_responses(True) #br.set_debug_http(True) br.open("https://www.mbank.com.pl/") ################## # LOGOWANIE time.sleep(1) br.select_form(name="MainForm") # wypelnienie formularza try: br['Y3VzdG9tZXI='.decode('base64')] = Y3VzdG9tZXI.decode('base64') br['cGFzc3dvcmQ='.decode('base64')] = cGFzc3dvcmQ.decode('base64') except: print "===> BLAD przy odszyfrowywaniu - ", sys.exc_info()[1] sys.exit() time.sleep(1) response_in = br.submit() # wyslanie formularza if response_in.geturl() == "https://www.mbank.com.pl/frames.aspx": print "===> Zalogowano poprawnie" else: print "===> BLAD przy logowywaniu" sys.exit() ################## # Wyswietlanie listy kont i wyciagow # funkcja get_konta pobiera wszystkie konta i potrzebne dane do uzyskania wyciagu z konta # jako opcje przyjmuje numer/numery konta bez spacji ktore maja zostac wyswietlone # funkcja get_trans pobiera transakcje w ostatnich 14 dniach (domyslnie w mbanku) # jako opcje przyjmuje zmienna post do uzyskania wyciagu oraz rodzaj transakcji do wyswietlenia # (wg specjalnej numeracji mbanku) ################## ################## konta = get_konta(wybor_konto) print "===> Znalezione konta:",konta.__len__() for konto in konta: print ("---> "+konto[2]+" "+(konto[3]+"("+konto[5]+")"+konto[4]).rjust(15, ' ')+" "+konto[1]).encode("utf8") trans = get_trans(konto[0], wybor_typ) for transa in trans: # print transa print (" -> "+transa[2].ljust(4, ' ')+" "+transa[0]+" "+transa[3]+" "+transa[6].ljust(32,' ')+" "+transa[8].rjust(10,' ')+" "+transa[5]).encode("utf8") ################## ################## # WYLOGOWANIE response_out = br.open("https://www.mbank.com.pl/logout.aspx") response_out.seek(2000) if response_out.read(6000).find('Poprawne wylogowanie z cz') > 0: print "===> Wylogowano poprawnie" else: print "===> BLAD przy wylogowywaniu"

27 Responses to “mBank skrypt do zautomatyzowanego pobierania wyciagu z konta”
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
Faktycznie !
Celem jest jakies polaczenie tego np z baza mysql, a nie samo wyswietlanie
Tak wiec lepiej „operacje” itp lepiej przeprowadzac w pythonie.
Tzn to co sie wyswietla to moje domyslne ustawienie, nikogo do niego nie zmuszam
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
Dzięki, teraz gra i buczy
By NieF on mar 23, 2009
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
Próbuję dostosować skrypt do ostatnich zmian i nie daję rady. Może któs pomóc?
By Mati on cze 19, 2009
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
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
Kiedy można się spodziewać poprawek do skryptu? Bo niestety po zmianach w mBanku skrypt przestał działać…
By Tomek on lip 13, 2009
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
Niech Ci Bóg w dzieciach wynagrodzi
By Piotrek on lip 13, 2009
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
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
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
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
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
Witam, Skrypt działa super ale omija mi konta mBiznes. Pozostałe pokazuje poprawnie.
By graby on lis 18, 2009
Po ostatnich weekendowych zmianach mBanku skrypt nie działa poprawnie.
By Adam on lis 25, 2009
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
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
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
Witam,
Ciesze sie ze sie przydaje.
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
Pozdr
J
By Yunnan on lis 30, 2009
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
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
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
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
Pojawila sie nowa wersja skryptu, zapraszam do uzywania !
By Yunnan on lut 28, 2010