fix login on website

This commit is contained in:
Romain Bignon 2012-09-24 15:14:17 +02:00
commit cdbda7c05c
4 changed files with 30 additions and 24 deletions

View file

@ -49,7 +49,14 @@ class SocieteGenerale(BaseBrowser):
self.location('https://' + self.DOMAIN_LOGIN + '/index.html') self.location('https://' + self.DOMAIN_LOGIN + '/index.html')
def is_logged(self): def is_logged(self):
return not self.is_on_page(LoginPage) if not self.page or self.is_on_page(LoginPage):
return False
error = self.page.get_error()
if error is None:
return True
return False
def login(self): def login(self):
assert isinstance(self.username, basestring) assert isinstance(self.username, basestring)
@ -57,7 +64,7 @@ class SocieteGenerale(BaseBrowser):
assert self.password.isdigit() assert self.password.isdigit()
if not self.is_on_page(LoginPage): if not self.is_on_page(LoginPage):
self.location('https://' + self.DOMAIN_LOGIN + '/index.html') self.location('https://' + self.DOMAIN_LOGIN + '/index.html', no_login=True)
self.page.login(self.username, self.password) self.page.login(self.username, self.password)

View file

@ -32,8 +32,8 @@ class Captcha(object):
def __init__(self, file, infos): def __init__(self, file, infos):
self.inim = Image.open(file) self.inim = Image.open(file)
self.infos = infos self.infos = infos
self.nbr = int(infos["nblignes"]) self.nbr = int(infos["nbrows"])
self.nbc = int(infos["nbcolonnes"]) self.nbc = int(infos["nbcols"])
(self.nx, self.ny) = self.inim.size (self.nx, self.ny) = self.inim.size
self.inmat = self.inim.load() self.inmat = self.inim.load()
self.map = {} self.map = {}
@ -53,7 +53,7 @@ class Captcha(object):
num = 0 num = 0
for c in code: for c in code:
index = self.map[int(c)].id index = self.map[int(c)].id
keycode = self.infos["keyCodes"][num * self.nbr * self.nbc + index] keycode = str(self.infos["grid"][num * self.nbr * self.nbc + index])
s += keycode s += keycode
if num < 5: if num < 5:
s += ',' s += ','

View file

@ -26,7 +26,9 @@ import re
from weboob.capabilities.bank import Account from weboob.capabilities.bank import Account
from weboob.tools.capabilities.bank.transactions import FrenchTransaction from weboob.tools.capabilities.bank.transactions import FrenchTransaction
from weboob.tools.browser import BasePage, BrokenPageError from weboob.tools.browser import BrokenPageError
from .base import BasePage
__all__ = ['AccountsList', 'AccountHistory'] __all__ = ['AccountsList', 'AccountHistory']

View file

@ -19,14 +19,17 @@
from logging import error from logging import error
import re
from weboob.tools.json import json
from weboob.tools.browser import BasePage, BrowserUnavailable from weboob.tools.browser import BrowserUnavailable
from weboob.tools.mech import ClientForm from weboob.tools.mech import ClientForm
from .base import BasePage
from ..captcha import Captcha, TileError from ..captcha import Captcha, TileError
from lxml import etree
__all__ = ['LoginPage'] __all__ = ['LoginPage', 'BadLoginPage']
class LoginPage(BasePage): class LoginPage(BasePage):
@ -45,23 +48,18 @@ class LoginPage(BasePage):
url_login = 'https://' + DOMAIN_LOGIN + '/index.html' url_login = 'https://' + DOMAIN_LOGIN + '/index.html'
base_url = 'https://' + DOMAIN base_url = 'https://' + DOMAIN
url = base_url + '/cvcsgenclavier?mode=jsom&estSession=0' url = base_url + '//sec/vk/gen_crypto?estSession=0'
headers = { headers = {
'Referer': url_login 'Referer': url_login
} }
request = self.browser.request_class(url, None, headers) request = self.browser.request_class(url, None, headers)
infos_data = self.browser.readurl(request) infos_data = self.browser.readurl(request)
infos_xml = etree.XML(infos_data)
infos = {}
for el in ("cryptogramme", "nblignes", "nbcolonnes"):
infos[el] = infos_xml.find(el).text
infos["grille"] = "" infos_data = re.match('^_vkCallback\((.*)\);$', infos_data).group(1)
for g in infos_xml.findall("grille"):
infos["grille"] += g.text + ","
infos["keyCodes"] = infos["grille"].split(",")
url = base_url + '/cvcsgenimage?modeClavier=0&cryptogramme=' + infos["cryptogramme"] infos = json.loads(infos_data.replace("'", '"'))
url = base_url + '//sec/vk/gen_ui?modeClavier=0&cryptogramme=' + infos["crypto"]
img = Captcha(self.browser.openurl(url), infos) img = Captcha(self.browser.openurl(url), infos)
try: try:
@ -71,19 +69,18 @@ class LoginPage(BasePage):
if err.tile: if err.tile:
err.tile.display() err.tile.display()
self.browser.openurl(url_login)
self.browser.select_form('n2g_authentification') self.browser.select_form('n2g_authentification')
self.browser.controls.append(ClientForm.TextControl('text', 'codsec', {'value': ''})) self.browser.controls.append(ClientForm.TextControl('text', 'codsec', {'value': ''}))
self.browser.controls.append(ClientForm.TextControl('text', 'cryptocvcs', {'value': ''})) self.browser.controls.append(ClientForm.TextControl('text', 'cryptocvcs', {'value': ''}))
self.browser.controls.append(ClientForm.TextControl('text', 'vk_op', {'value': 'auth'}))
self.browser.set_all_readonly(False) self.browser.set_all_readonly(False)
self.browser['codcli'] = login self.browser['codcli'] = login
self.browser['user_id'] = login self.browser['user_id'] = login
self.browser['codsec'] = img.get_codes(password[:6]) self.browser['codsec'] = img.get_codes(password[:6])
self.browser['cryptocvcs'] = infos["cryptogramme"] self.browser['cryptocvcs'] = infos["crypto"]
self.browser.submit() self.browser.submit(nologin=True)
class BadLoginPage(BasePage): class BadLoginPage(BasePage):
def get_error(self): pass
return self.document.xpath('//span[@class="error_msg"]')[0].text.strip()