fix login on website
This commit is contained in:
parent
0faa643162
commit
cdbda7c05c
4 changed files with 30 additions and 24 deletions
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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 += ','
|
||||
|
|
|
|||
|
|
@ -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']
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue