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')
|
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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 += ','
|
||||||
|
|
|
||||||
|
|
@ -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']
|
||||||
|
|
|
||||||
|
|
@ -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()
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue