diff --git a/modules/societegenerale/sgpe/browser.py b/modules/societegenerale/sgpe/browser.py index 87c42d85..158c3e88 100644 --- a/modules/societegenerale/sgpe/browser.py +++ b/modules/societegenerale/sgpe/browser.py @@ -68,8 +68,12 @@ class SGPEBrowser(BaseBrowser): def accounts(self): self.location('/Pgn/NavigationServlet?PageID=SoldeV3&MenuID=%s&Classeur=1&NumeroPage=1' % self.MENUID) - def history(self, _id): - self.location('/Pgn/NavigationServlet?PageID=ReleveCompteV3&MenuID=%s&Classeur=1&Rib=%s&NumeroPage=1' % (self.MENUID, _id)) + def history(self, _id, page=1): + if page > 1: + pgadd = '&page_numero_page_courante=%s' % page + else: + pgadd = '' + self.location('/Pgn/NavigationServlet?PageID=ReleveCompteV3&MenuID=%s&Classeur=1&Rib=%s&NumeroPage=1%s' % (self.MENUID, _id, pgadd)) def get_accounts_list(self): if not self.is_on_page(AccountsPage): @@ -83,10 +87,16 @@ class SGPEBrowser(BaseBrowser): yield a def iter_history(self, account): - self.history(account.id) - assert self.is_on_page(HistoryPage) - for transaction in self.page.iter_transactions(account): - yield transaction + page = 1 + while page: + self.history(account.id, page) + assert self.is_on_page(HistoryPage) + for transaction in self.page.iter_transactions(account): + yield transaction + if self.page.has_next(): + page += 1 + else: + page = False class SGProfessionalBrowser(SGPEBrowser): diff --git a/modules/societegenerale/sgpe/pages.py b/modules/societegenerale/sgpe/pages.py index 3ec61c72..0a9033c2 100644 --- a/modules/societegenerale/sgpe/pages.py +++ b/modules/societegenerale/sgpe/pages.py @@ -111,6 +111,9 @@ class HistoryPage(SGPEPage): def iter_transactions(self, account): table = self.parser.select(self.document.getroot(), '#tab-corps', 1) for i, tr in enumerate(self.parser.select(table, 'tr', 'many')): + # td colspan=5 + if len(self.parser.select(tr, 'td')) == 1: + continue tddate, tdlabel, tddebit, tdcredit, tdval, tdbal = [td.text_content().strip() for td in self.parser.select(tr, 'td', 4)] @@ -129,3 +132,10 @@ class HistoryPage(SGPEPage): t.parse(date, l1 + ' ' + l2) t._val = val # FIXME is it rdate? date? yield t + + def has_next(self): + for n in self.parser.select(self.document.getroot(), '#numPageBloc'): + cur = int(self.parser.select(n, '#numPage', 1).value) + for end in self.parser.select(n, '.contenu3-lien'): + return int(end.text.replace('/', '')) > cur + return False