6 октября 2009 г.

Деньги на банковской карте

После создания графика для баланса в телефоне, захотел сделать график баланса на банковской карте ВТБ24 :) Для этого можно использовать Телебанк.

Научить питон-робота работать с сайтом Телебанка было чуть сложнее чем с сайтом ИССА. Вот почему.

Форма логина перед отправкой данных вызывает JS код, который делает очень простую проверку введённых данных (просто что они есть), и выставляет скрытому полю js значение 1 (по-умолчанию - 0). Если серверу приходит форма где js == 0, он говорит что в браузере нет JavaScript и не хочет работать дальше. Хотя JS там выполняет далеко не главную задачи и без него вполне можно работать.

Немного поразбиравшись с mechanize, я научил робота выставлять в поле js значение 1:
browser.select_form(name = 'FormLogin')
browser['TextBoxName'] = LOGIN
browser['TextBoxPassword'] = PASSWORD

# There is `js` hidden readonly param, by default it's 0, and site
# says that JS is disabled. So we pretend that we have JS by setting
# `js`= 1. But first delete readonly flag 
browser.find_control('js').readonly = False
browser['js'] = '1'
На этом трудности кончились :)

Добавил новый скрипт во встроенный планировщик, теперь у меня два красивых графика :)


# -*- coding:utf-8 -*-

from mechanize import Browser
from time import strftime
import re
import os, sys

LOGIN_URL = 'https://www.telebank.ru/WebNew/Login.aspx'
ACCOUNT_URL = 'https://www.telebank.ru/WebNew/Accounts/Accounts.aspx'
DATA_FILE = os.path.dirname(sys.argv[0]) + '/history.txt'
LOGIN = 'Телебанк логин'
PASSWORD = 'Телебанк пароль'

browser = Browser()

# Open page with login form
#print('Opening login page...')
browser.open(LOGIN_URL)

# Fill in form fields - login/password
#print('Filling in login form...')
browser.select_form(name = 'FormLogin')
browser['TextBoxName'] = LOGIN
browser['TextBoxPassword'] = PASSWORD

# There is `js` hidden readonly param, by default it's 0, and site
# says that JS is disabled. So we pretend that we have JS by setting
# `js`= 1. But first delete readonly flag 
browser.find_control('js').readonly = False
browser['js'] = '1'

# Submit form
#print('Submitting form...')
r = browser.submit()
page = r.read().decode('cp1251')

# Check that site gave us "You logged in, but please wait"
try:
    page.index('Вход в систему выполнен')
except:
    print("! Login failed")
    exit(1)

# Open accounts URL
#print('Opening accounts page...')
r = browser.open(ACCOUNT_URL)
page = r.read().decode('cp1251')

match = re.search(ur'>(?P<money>\d+(\.|,)\d+)<', page, re.IGNORECASE)
if match:
    money = float(match.group('money').replace(',', '.'))
    f = open(DATA_FILE, 'a')
    f.write('%s, %.2f\n' % (strftime('%d.%m.%Y %H:%M'), + money))
    f.close()
    
    print('Card balance: %.2f rub' % money)
else:
    print("! Can't find balance info")
    print page

Комментариев нет:

Отправить комментарий