diff --git a/modules/bred/browser.py b/modules/bred/browser.py index 056ef688..73e75c05 100644 --- a/modules/bred/browser.py +++ b/modules/bred/browser.py @@ -42,10 +42,13 @@ class BredBrowser(BaseBrowser): } def is_logged(self): - return not self.is_on_page(LoginPage) + return self.page is not None and not self.is_on_page(LoginPage) def home(self): - return self.location('https://www.bred.fr/mylittleform?type=1') + if not self.is_logged(): + self.login() + else: + self.location('https://www.bred.fr/Andromede/Main') def login(self): assert isinstance(self.username, basestring) @@ -56,13 +59,14 @@ class BredBrowser(BaseBrowser): self.page.login(self.username, self.password) - assert self.is_on_page(LoginResultPage) + assert self.is_on_page((LoginResultPage, EmptyPage)) - error = self.page.get_error() - if error is not None: - raise BrowserIncorrectPassword(error) + if self.is_on_page(LoginResultPage): + error = self.page.get_error() + if error is not None: + raise BrowserIncorrectPassword(error) - self.page.confirm() + self.page.confirm() def get_accounts_list(self): if not self.is_on_page(AccountsPage): diff --git a/modules/bred/pages.py b/modules/bred/pages.py index accdb48b..7b7049ae 100644 --- a/modules/bred/pages.py +++ b/modules/bred/pages.py @@ -18,6 +18,7 @@ # along with weboob. If not, see . +from mechanize import FormNotFoundError from decimal import Decimal, InvalidOperation import re @@ -39,6 +40,25 @@ class LoginPage(BasePage): class LoginResultPage(BasePage): + def on_loaded(self): + for script in self.document.xpath('//script'): + text = script.text + if text is None: + continue + m = re.search("window.location.replace\('([^']+)'\);", text) + if m: + self.browser.location(m.group(1)) + + try: + self.browser.select_form(name='banque') + except FormNotFoundError: + pass + else: + self.browser.set_all_readonly(False) + self.browser['typeCompte'] = 'P' + self.browser.submit() + + def confirm(self): self.browser.location('MainAuth?typeDemande=AC', no_login=True)