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')
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):
assert isinstance(self.username, basestring)
@ -57,7 +64,7 @@ class SocieteGenerale(BaseBrowser):
assert self.password.isdigit()
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)

View file

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

View file

@ -26,7 +26,9 @@ import re
from weboob.capabilities.bank import Account
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']

View file

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