fix login on accounts with several subaccounts

This commit is contained in:
Romain Bignon 2013-04-01 14:47:11 +02:00
commit 3f5b2c6d41
2 changed files with 31 additions and 7 deletions

View file

@ -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):

View file

@ -18,6 +18,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
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)