From 43f447227a00735a8205d17994dfdd097e388c03 Mon Sep 17 00:00:00 2001 From: Baptiste Delpey Date: Wed, 5 Aug 2015 11:26:14 +0200 Subject: [PATCH] caissedepargne fix IndexError related to investment feature --- modules/caissedepargne/browser.py | 9 ++++++--- modules/caissedepargne/pages.py | 13 +++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/modules/caissedepargne/browser.py b/modules/caissedepargne/browser.py index 8c024a18..de4d16c1 100644 --- a/modules/caissedepargne/browser.py +++ b/modules/caissedepargne/browser.py @@ -144,7 +144,10 @@ class CaisseEpargne(Browser): self.page.submit() self.location('https://www.caisse-epargne.offrebourse.com/Portefeuille') elif account.type is Account.TYPE_LIFE_INSURANCE: - self.page.go_life_insurance() - self.page.submit() - self.location('https://www.extranet2.caisse-epargne.fr%s' % self.page.get_cons_repart()) + try: + self.page.go_life_insurance(account) + self.page.submit() + self.location('https://www.extranet2.caisse-epargne.fr%s' % self.page.get_cons_repart()) + except IndexError: + return iter([]) return self.page.iter_investment() diff --git a/modules/caissedepargne/pages.py b/modules/caissedepargne/pages.py index 921500bc..8c171747 100644 --- a/modules/caissedepargne/pages.py +++ b/modules/caissedepargne/pages.py @@ -179,8 +179,13 @@ class IndexPage(Page): if not account.type == Account.TYPE_LIFE_INSURANCE: return NotAvailable self.go_history(account._info) - balance = self.browser.page.document.xpath('.//tr[td[contains(text(), ' + account.id + ')]]/td[contains(@class, "somme")]')[0] - balance = Decimal(FrenchTransaction.clean_amount(self.parser.tocleanstring(balance))) + balance = self.browser.page.document.xpath('.//tr[td[contains(text(), ' + account.id + ')]]/td[contains(@class, "somme")]') + if len(balance) > 0: + balance = self.parser.tocleanstring(balance[0]) + balance = Decimal(FrenchTransaction.clean_amount(balance)) if balance != u'' else NotAvailable + else: + balance = NotAvailable + self.go_list() return balance def get_list(self): @@ -346,8 +351,8 @@ class IndexPage(Page): return True - def go_life_insurance(self): - link = self.document.xpath('//table[@summary="Mes contrats d\'assurance vie"]/tbody/tr//a')[0] + def go_life_insurance(self, account): + link = self.document.xpath('//table[@summary="Mes contrats d\'assurance vie"]/tbody/tr[td[contains(text(), ' + account.id + ') ]]//a')[0] m = re.search("PostBack(Options)?\([\"'][^\"']+[\"'],\s*['\"](REDIR_ASS_VIE[\d\w&]+)?['\"]", link.attrib.get('href', '')) if m is not None: self.browser.select_form(name='main')