Kategoria: Programowanie
mBank skrypt v3
2010 Marzec 10 – 23:03Po ukończeniu skryptu do wyciągu z konta mBank w wersji 3, zdecydowałem się założyć nowy wpis, żeby uporządkować sprawy.
mBank auto skrypt v3.0.0 v3.0.1 v3.0.3 v3.0.4 v3.0.5 v3.0.6 v3.0.8
Główna różnica to rozdzielenie skryptu na 4 pliki:
- plik README z instrukcją itp
- plik konfiguracyjny
- plik z funkcjami
- główny plik wykonywalny
Readme to każdy wie co tam jest.
Plik konfiguracyjny ma być o tyle korzystnym rozwiązaniem, że przy updacie pozostałych plików, plik z konfiguracją może pozostać nieruszony.
Plik z funkcjami, to będzie prawdopodobnie najczęściej aktualizowany plik.
Plik główny wykonywalny, łączy pozostałe pliki do kupy, oraz zawiera wygląd danych wyjściowych. To właśnie w pliku głównym należy podłączyć skrypt np do bazy danych.
Będę się starał żeby zarówno plik konfiguracyjny, jak i zmienne wychodzące z funkcji były zawsze takie same. Przez to przy nawet przy zintegrowaniu skryptu z czymś innym, aktualizacja powinna być bezproblemowa.
Aktualne pliki skryptu
Aktualizacja v3.0.3 dotyczy dwóch plików: mbank_auto_skrypt i mbank_auto_skrypt.func.
Aktualizacja v3.0.4 dotyczy pliku: mbank_auto_skrypt.func.
Aktualizacja v3.0.5 dotyczy pliku: mbank_auto_skrypt.func i mbank_auto_skrypt.README.
Aktualizacja v3.0.6 dotyczy pliku: mbank_auto_skrypt.func i mbank_auto_skrypt.README.
Aktualizacja v3.0.8 dotyczy pliku: zasadniczo wszystkich, ale teoretycznie konfig moze zostac jesli sie go odpowiednio poprawi.
mbank_auto_skrypt_v308/mbank_auto_skrypt.README
mbank_auto_skrypt_v308/mbank_auto_skrypt.conf
mbank_auto_skrypt_v308/mbank_auto_skrypt.func
mbank_auto_skrypt_v308/mbank_auto_skrypt
Kod źródłowy skryptu
http://www.yunnan.tk/wp-content/files/skrypty/mbank_auto_skrypt_v308/mbank_auto_skrypt.README
#-############################################# # mBank_auto_skrypt v3.0.8 # 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 # v3.0.0 podzial na plik glowny, funkcje i plik konfiguracyjny # v3.0.1 usprawnienie includowania pozostalych plikow # v3.0.2 Pawel Maziarz - poprawka pozwalajaca uruchamianie skryptu z dowolnego katalogu # v3.0.3 mbank znowu musial cos zmienic... poprawione
# v3.0.4 chyba jakas drobnostka, bo nie pamietam co poprawilem
# v3.0.? mbank tak szybko zmienil kod html (usuniecie informacji o transakcji), # a potem przywrocil spowrotem stary, ze nie zdazylem zareagowac
# v3.0.5 skrypt nie wyswietlal kont z cyframi w nazwie - poprawione # drobne oczyszczenie kodu # v3.0.6 # v3.0.7 mbank zmienil troche nazwy w selektorze operacji, tak wiec plik konfiguracji i func sie troszke zmienil # v3.0.8 wpisanie kodowania utf-8 do wszystkich plikow uruchamialnych, bo python zaczal narzekac # pewnie nie dotyczy to nikogo oprocz mnie, bo nie kazdy jedzie na debianie experimental
#-## AKTUALNE WERSJE # zeby zachowac porzadek i wyjasnic ktore pliki nalezy zaktualizowac, zrobilem liste aktualnych wersji plikow # posiadajac wymieniona wersje pliku, nie trzeba go aktualizowac # mbank_auto_skrypt v3.0.8 Nowy # mbank_auto_skrypt.README v3.0.8 Nowy # mbank_auto_skrypt.conf v3.0.8 Nowy # mbank_auto_skrypt.func v3.0.8 Nowy #-## TODO # wykrywanie kredytu gotowkowego # wypisywanie operacji karta, ktore sa wykonane, ale jeszcze nie zaksiegowanie na koncie # wypisywanie inwestycji # wypisywanie lokat #-## 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 ##### ### Selektory operacji # ALL000000 Wszystkie # ABO000000 Uznania rachunku # CAR000000 Obci??enia rachunku # TRI111000 Przelewy przychodz?ce # TRO111000 Przelewy wychodz?ce # TUS111000 Przelewy podatkowe # TRZ101000 Przelewy do ZUS # LDS100000 Operacje kartowe # CRE100000 Operacje na kredycie # CAI100000 Wp?aty gotówkowe # CAO100000 Wyp?aty gotówkowe # INT000000 Kapitalizacja odsetek # COM100000 Prowizje i op?aty # TDI111000 Przelew z/na r-ek brokerski ##### # - 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.
http://www.yunnan.tk/wp-content/files/skrypty/mbank_auto_skrypt_v308/mbank_auto_skrypt.conf
#!/usr/bin/python # coding: utf-8 #-############################################# # KONFIGURACJA # mBank_auto_skrypt v3.0.8 #-############################################# #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 na koncu pliku i w readme wybor_typ = 'ALL000000' # 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 = 'W' wybor_numer = '4' #-############################################# # nie zaimplementowane #rangepanel_group=[daterange_radio, *lastdays_radio, lastlogin_radio])> #wybor_data_od = '20091101' #wybor_data_do = '20091203' ################ ### Selektory operacji # ALL000000 Wszystkie # ABO000000 Uznania rachunku # CAR000000 Obci??enia rachunku # TRI111000 Przelewy przychodz?ce # TRO111000 Przelewy wychodz?ce # TUS111000 Przelewy podatkowe # TRZ101000 Przelewy do ZUS # LDS100000 Operacje kartowe # CRE100000 Operacje na kredycie # CAI100000 Wp?aty gotówkowe # CAO100000 Wyp?aty gotówkowe # INT000000 Kapitalizacja odsetek # COM100000 Prowizje i op?aty # TDI111000 Przelew z/na r-ek brokerski ###
http://www.yunnan.tk/wp-content/files/skrypty/mbank_auto_skrypt_v308/mbank_auto_skrypt.func
#!/usr/bin/python
# coding: utf-8
#-#############################################
# FUNKCJE
# mBank_auto_skrypt v3.0.8
#-#############################################
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(br, value='(.*)'):
#global wybor_period
#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 2010.09, poprawiony dla kont z cyframi z nazwie rachunku
sz_konto = re.compile('\'/account_details.aspx\',\'\',\'POST\',\'[^<]+href="#">([^<]+)\ ([0-9\ ]{28}[0-9]{4})</a>.*\'/account_oper_list.aspx\',\'\',\'POST\',\'([^\']+)\'[^<]+href="#">([0-9-,\ ]+)\ ([A-Z]{3})</a></p><p class="Amount">.*">([0-9-,\ ]+)\ [A-Z]{3}</span></p>')
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(br, value='', valuea='ALL000000'):
global wybor_period
#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 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')
# magiczny regexp po 2010.12
sz_next = re.compile('button\ id="PrevPage"\ onclick="doSubmit\(\'/account_oper_list.aspx\',\'\',\'POST\',\'(.*)\',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.pop(0) # bezpieczniejsze jest remove (('__PARAMETERS', '')) ale wtedy potrzeba try
submit[0] = ('__PARAMETERS', trans_next) # niby trans_next[0] bedzie poprawniej, ale tak tez dziala
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
# print r_trans
return r_trans
http://www.yunnan.tk/wp-content/files/skrypty/mbank_auto_skrypt_v308/mbank_auto_skrypt
#!/usr/bin/python
# coding: utf-8
#-#############################################
# mBank_auto_skrypt v3.0.8
# Made by Jedrzej Schmeidel (Yunnan)
# on 2009/02
# www.yunnan.tk
# yunnan@yunnan.tk
#-#############################################
import os
import time
import re
import sys
from mechanize import Browser
from urllib import urlencode
#from urllib2 import Request
#-#############################################
# KONFIGURACJA i FUNKCJE
#-#############################################
execfile(os.path.dirname(sys.argv[0]) + '/mbank_auto_skrypt.conf')
execfile(os.path.dirname(sys.argv[0]) + '/mbank_auto_skrypt.func')
#-########mBank#####################################
print "===> Uruchomienie wersja mBank_auto_skrypt v3.0.3"
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(br, 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(br, 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[7]).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"

34 Responses to “mBank skrypt v3”
Nie wiem w czym problem, ale za każdym razem dostaje informacje,że nie ma kont.
Próbowałem na eKoncie, eMax i eMax plus.
By Zelo on maj 9, 2010
Niestety znowu jakieś zmiany na stronie mBanku i nie wyświetla poprawnie kont.
By NieF on maj 9, 2010
v303
Dzięki za info ! Już poprawione. Magiczny regexp zostal zmieniony
z:’\'account_details.aspx
na:’\'/account_details.aspx
Tak tak, dobrze widzicie. Ktos z polotem dopisal sobie / na poczatku
Z tego co sie domyslam to jakas drobna kwestia bezpieczenstwa.
Pliku konfiguracyjnego nie trzeba aktualizowac !
Pozdr
J
By Yunnan on maj 10, 2010
Działa świetnie.
.
Dzięki za skrypt i szybką reakcje
By Zelo on maj 10, 2010
Chciałem wkleić log z błędu ze skryptu, ale z domowej maszyny dostaję komunikat:
Hmmm, your comment seems a bit spammy. We’re not real big on spam around here
a z maszyny w pracy mam inny komunikat, o tym że wysyłanie wiadomości za serwera proxy jest zabronione.
Może warto nieco „poluzować” politykę antyspamową?…
Pozdr.
Tomek
By Tomek on maj 17, 2010
Witam, moze masz racje. Polegam na wp-spamfree i czymstam jeszcze. Wp-spamfree zablokowal 25tys wpisow przez ostatnie 12 miesiecy, a ty jestes pierwsza osoba ktorej zostala przez to poszkodowana i mnie o tym poinformowala
Teraz powinno sie dac postowac zza proxy, ale co do postow z domu, to niestety nie wiem, ale raczej grzebac w wp-spamfree nie bede…
Jak cos to pisz mejla.
Pozdrawiam
J
By Yunnan on maj 17, 2010
Dla mojego drugiego (ostatniego) konta eMAX plus dostaję poniższy błąd:
—> NNNNNNNNNNNNNNNNN 99,99(99,99)PLN eMAX plus
Traceback (most recent call last):
File „./mbank_auto_skrypt, line 64, in
trans = get_trans(br, konto[0], wybor_typ)
File „./mbank_auto_skrypt.func”, line 79, 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’
Zauważyłem, że jak w pliku konfiguracyjnym zmienię wartość ‘wybor_numer’ z domyślnych 14 dni na 4, to w/w błąd znika.
By Tomek on maj 18, 2010
Jeszcze tego nie rozgryzłem. Jest to na tyle dziwaczne że wygląda na jakieś specjalne utrudnienie dla skryptów. Jest to ogólnie bez sensu jeśli faktycznie tak jest, bo będę musiał zrobić 2 razy więcej zapytań do strony mbanku. To szkodzi tylko mbankowi, no i skrypt się dłużej wykonuje
Ciekawe że czasami się pojawia ten błąd, a czasami nie. Dziwne…
By Yunnan on maj 21, 2010
Witam! Próbowałem dzisiaj pobawić się skryptem, ale nie jest w stanie się zalogować (hasło etc. zakodowane poprawnie). Czyżby mBank znów coś zmienił?
By Jakub on cze 2, 2010
@Tomek: skrypt juz jest poprawiony i dziala (u mnie), mBank dorzucil jakas zmienna ktora potem wystepowala podwojnie. Plik „func” jest w wersji v3.0.4.
@Jakub: skrypt dziala dobrze, po ostatniej poprawce nawet wszystko dziala i moze zabiore sie w koncu za wypisywanie dzialu „Inwestycje”.
By Yunnan on cze 16, 2010
Dzięki za poprawki.
Ostatnio nawet napisałem skrypt, który cyklicznie sprawdza, czy pojawiły się u Ciebie nowsze wersje i ew. robi podmiankę.
Co do kierunku przyszłych zmian, to miło by było, gdyby pojawiło się wypisywanie stanu blokad dla rachunku (historia->blokady i zawieszenia). Wtedy miałbym informację o transakcjach przeprowadzonych za pomocą karty prawie on-line, a nie dopiero po kilku dniach, gdy zostaną one potwierdzone.
By Tomek on cze 24, 2010
Witam,
Jak znajde chwile to przeniose to na code.google albo sourceforge to bedzie latwiej kontrolowac wersje.
z tym cyklicznym sprawdzaniem to chyba przesada
Co do blokad, to czy czasem nie trzeba by sciagac informacji o blokadach z karty Karty->Blokady ?
Priorytetowe wydaje mi sie wypisanie „Inwestycje”, ale jak znajde czas, to pomysle nad jednym i drugim.
By Yunnan on cze 24, 2010
Witam,
Wczoraj (07.09.2010) mBank zmienil szate graficzna i skrypt przestal dzialac.
Sygnalizuje tylko problem….
Kiedy mozna spodziewac sie poprawek?
ADMIN: Przeniesiono ze starego wątku.
By Annc on wrz 8, 2010
Witam, dawno szukałem takiego rozwiązania !!! Brawo !!!
Dodam jeszcze, że 5 września mBank „poprawił” wygląd serwisu i skrypt nie działa. Nie działa, gdyż na wykazie w serwisie transakcyjnym nie ma tytułu przelewu (sic!). Obiecali jednak to przywrócić.
Mam pomysł: może Yunnan by się pokusił o zaglądanie do każdej transakcji z osobna, wówczas skrypt byłby mniej podatny na zmiany w kodzie mBanku, miał większe możliwości, magiczne regexpy byłyby prostsze (mogłyby zawierać nazwy pól z kodu).
Pozdrawiam.
By szczurek on wrz 14, 2010
Witam,
Zdaje się, że po ostatnich zmianach w mbanku skrypt nie wyświetla już m.in. informacji o nazwisku nadawcy przelewu przychodzącego. Pozostałe informacje wyświetlają się OK.
By Tomek on wrz 15, 2010
Witam,
i sie juz kusil, ale sie nie skusil. Zajrzenie do kazdej transakcji to ok 0,5-1 sek czyli wypisanie 100 transakcji to ~2 minuty ! Zasadniczo zwykle dodaje 1 sekunde czekania pomiedzy zapytaniami zeby nie „floodowac” mbanku, naturalnie tutaj musial bym to pominac.
w rzeczy samej. Skrypt jako tako dziala, choc nie zawiera tytulu przelewu. Jest tak wlasnie z powodu ze w glownym spisie transakcji nie ma tytulu przelewu.
@szczurek: Yunnan moglby pokusic sie na zagladanie do kazdej transakcji
Regexpy moglyby byc troche prostsze, ale byloby ich wiecej… Pozatym musialby byc dodany kolejny loop, ktory wchodzilby do transakcji.
Tak czy owak, w skrocie wolalbym uniknac dodatkowych komplikacji i mam nadzieje ze tytul przelewu zostanie przywrocony. Jesli jednak to nie nastapi to jedynym rozwiazaniem bedzie dodatkowe „zakomplikowanie” kodu. To jednak musi zaczekac.
EDIT: Jupi ! Wszystko dziala spowrotem. Tytuly i wykonawcy transakcji zostali przywroceni, nic nie trzeba poprawiac.
By Yunnan on wrz 17, 2010
Co może być nie tak ze skryptem jeśli dostaję błąd ===> BLAD przy logowywaniu (do porawy btw.)? Na stronie po zalogowaniu do serwisu transakcyjnego nie mam błędnej próby logowania.
By szym on wrz 18, 2010
Ok, miałem problem z base64. Teraz już się loguje ale nie znajduje 3 ostatnich eMax+.
By szym on wrz 18, 2010
@szym: mejl wyslany
By Yunnan on wrz 27, 2010
Wersja v3.0.5 dopuszcza cyfry w nazwie konta (to byl powod nie wykrywania kont u niektorych osob, poniewaz nazwy kont mialy cyfry, a skrypt tego nie dopuszczal).
Dzieki pomocy szym problem zostal namierzony i rozwiazany.
By Yunnan on wrz 29, 2010
No i cos od dzisiaj sie wysypalow mbank z skryptem (10.04.2011)
Traceback (most recent call last):
File „./mbank_auto_skrypt”, line 64, in
trans = get_trans(br, konto[0], wybor_typ)
File „./mbank_auto_skrypt.func”, line 74, in get_trans
br["accoperlist_typefilter_group"] = [str(wybor_typ)]
File „/usr/lib/python2.5/site-packages/ClientForm.py”, line 2878, in __setitem__
control.value = value
File „/usr/lib/python2.5/site-packages/ClientForm.py”, line 2073, in __setattr__
self._set_value(value)
File „/usr/lib/python2.5/site-packages/ClientForm.py”, line 2094, in _set_value
self._single_set_value(value)
File „/usr/lib/python2.5/site-packages/ClientForm.py”, line 2117, in _single_set_value
on, off = self._get_items(value[0])
File „/usr/lib/python2.5/site-packages/ClientForm.py”, line 2102, in _get_items
„insufficient items with name %r” % name)
ClientForm.ItemNotFoundError: insufficient items with name ‘ALL’
Co moge zrobic aby było ok?
By Dawid on kwi 10, 2011
Od dziesiejszego poranka przestał działać skrypt. Czyżby mbank znowu coś zmienił?
===> Uruchomienie wersja mBank_auto_skrypt v3.0.3
===> Zalogowano poprawnie
===> Znalezione konta: 4
—> NNNNNNNNNNNNNNNNNNNNN 111,05(111,05)PLN eKONTO
Traceback (most recent call last):
File „./mb-auto.sh”, line 64, in
trans = get_trans(br, konto[0], wybor_typ)
File „./mbank_auto_skrypt.func”, line 74, in get_trans
br["accoperlist_typefilter_group"] = [str(wybor_typ)]
File „/usr/lib/python2.6/dist-packages/ClientForm.py”, line 2897, in __setitem__
control.value = value
File „/usr/lib/python2.6/dist-packages/ClientForm.py”, line 2092, in __setattr__
self._set_value(value)
File „/usr/lib/python2.6/dist-packages/ClientForm.py”, line 2113, in _set_value
self._single_set_value(value)
File „/usr/lib/python2.6/dist-packages/ClientForm.py”, line 2136, in _single_set_value
on, off = self._get_items(value[0])
File „/usr/lib/python2.6/dist-packages/ClientForm.py”, line 2121, in _get_items
„insufficient items with name %r” % name)
ClientForm.ItemNotFoundError: insufficient items with name ‘ALL’
By Tomek on kwi 11, 2011
Witam
mBank znowu wprowadził „ulepszenia” na swojej stronie i skrypt przestał pobierać od 10 kwietnia. Będzie możliwość sprawdzenia w czym jest problem?
Skrypt wypluwa mi coś takiego:
Traceback (most recent call last):
File „./mbank_auto_skrypt”, line 71, in
trans = get_trans(br, konto[0], wybor_typ)
File „./mbank_auto_skrypt.func”, line 74, in get_trans
br["accoperlist_typefilter_group"] = [str(wybor_typ)]
mechanize._form.ItemNotFoundError: insufficient items with name ‘TRI’
By Marcin J. on kwi 12, 2011
Po kolejnych zmianach w mbanku skrypt niestety nie działa.
By Adam on kwi 12, 2011
Od kilku dni nie działa mi skrypt? Czy będą jakieś poprawki?
By Andrzej on kwi 15, 2011
Witam, poprawki pojawia sie dzis wieczorem, albo jutro. Poprawki sa drobne i dotycza jedynie selektora operacji (wyboru typu operacji bankowej).
Najprosciej, w konfiguracji, zmienic „wybor_typ” z „ALL” na „ALL000000″.
Pelna lista nowych selektorow to:
ALL000000 Wszystkie
ABO000000 Uznania rachunku
CAR000000 Obciążenia rachunku
TRI111000 Przelewy przychodzące
TRO111000 Przelewy wychodzące
TUS111000 Przelewy podatkowe
TRZ101000 Przelewy do ZUS
LDS100000 Operacje kartowe
CRE100000 Operacje na kredycie
By Yunnan on kwi 15, 2011
Chyba znów coś przestało działać. Poniżej output z wywołania skryptu.
http://paste.ofcode.org/medcFH2ZyJUR6YQBXkKLig
By zelo on cze 7, 2011
do powyższego komenta
Wszystko działa po zmianie typu na ALL000000 z tym ze python mi zcachował skrypt i nie działało chwilowo.
By zelo on cze 9, 2011
Skrypt wygląda ciekawie ale czy działa?
[code]
Traceback (most recent call last):
File "./mbank_auto_skrypt", line 64, in
trans = get_trans(br, konto[0], wybor_typ)
File "./mbank_auto_skrypt.func", line 74, in get_trans
br["accoperlist_typefilter_group"] = [str(wybor_typ)]
File "/usr/lib/python2.6/dist-packages/ClientForm.py", line 2897, in __setitem__
control.value = value
File "/usr/lib/python2.6/dist-packages/ClientForm.py", line 2092, in __setattr__
self._set_value(value)
File "/usr/lib/python2.6/dist-packages/ClientForm.py", line 2113, in _set_value
self._single_set_value(value)
File "/usr/lib/python2.6/dist-packages/ClientForm.py", line 2136, in _single_set_value
on, off = self._get_items(value[0])
File "/usr/lib/python2.6/dist-packages/ClientForm.py", line 2121, in _get_items
"insufficient items with name %r" % name)
ClientForm.ItemNotFoundError: insufficient items with name 'ALL'
[/code]
By Croo on cze 10, 2011
@zelo: Python lubi czasami skompilowac sobie skrypta zeby go szybciej uruchamiac, dlatego twoja zmiana mogla nie zadzialac od razu. Pozatym fajna stronka paste.ofcode.org
@Croo: Uzytkownicy sa bardzo wyksztalceni, ale czy potrafia czytac ?

Wydaje mi sie ze to marketingowo/managerski tekst motywujaco bezosobowy… Yunnan tego nie lubic, Yunnan lubic prosto z mostu, skrypt dzialac, albo nie dzialac, jak nie dzialac to log, a nie zadne pytania retoryczne
Pare postow wyzej jest „patch” dla nazw (selektorow) operacji. Jesli traceback zawiera wpis w ostatniej linii „ALL” to od razu widac ze zostal uzyty stary (nie dzialajacy) selektor i ze uzytkownik nie przeczytal nawet trzech postow wstecz
Koniec z „ironia mode”, cieszy mnie zainteresowanie skryptem, sam go uzywam i dziala. Poprawka byla tak drobna, ze nie bylo sensu jej uploadowac, bo to tylko pare dopisanych cyferek. Wersja 3.0.8 jest juz zalatana i kompatybilna z najnowszym pajtonem, tak wiec teraz prosze o merytoryczny odzew
By Yunnan on cze 10, 2011
Witam, skrypt ma mały problem z importem operacji w przypadku gdy niemam tytułu operacji. Jak sa tytuly operacji jest ok a jak jest pusty tytuł operacji to nie widzi danego przelewu
By Dawid on lip 2, 2011
Rozwianie problemu zwiazanego z brakiem tytulu operacji. Zamiast tytulu wywali FilterType lesz przynajmniej zaimportuje dana transakcje a nie pominie
sz_trans4 = re.compile(‘_0_0″>([0-9-]+)<span[^([0-9-]+)().*href=”#”>([^<]+)([^<]+)([^<]+)<span class="([^.*">([0-9-\ ,]+)\ [A-Z]+.*”>([0-9-\ ,]+)\ ([A-Z]+)\n’)
By Dawid on lip 2, 2011
Zauważyłem, że skrypt omija „PRZELEW WALUTOWY PRZYCHODZĄCY” mimo ustawienia typu na ALL.
W razie chęci analizy problemu służę źródłem.
By Adam on gru 6, 2011