Научить питон-робота работать с сайтом Телебанка было чуть сложнее чем с сайтом ИССА. Вот почему.
Форма логина перед отправкой данных вызывает 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
Комментариев нет:
Отправить комментарий