diff --git a/modules/banquepopulaire/browser.py b/modules/banquepopulaire/browser.py index df8c1b1397dc9cb83577119fdb303a0b0ecc77af..7bf7783c79841d978bb68e057f1dce19fb869a37 100644 --- a/modules/banquepopulaire/browser.py +++ b/modules/banquepopulaire/browser.py @@ -368,7 +368,8 @@ def get_history_by_receipt(account, coming, sel_tbl1=None): self.location('/cyber/internet/Page.do', params=next_params) if coming and account._coming_count: - for i in range(account._coming_count): + for i in range(account._coming_start, + account._coming_start + account._coming_count): for tr in get_history_by_receipt(account, coming, sel_tbl1=i): yield tr else: diff --git a/modules/banquepopulaire/pages.py b/modules/banquepopulaire/pages.py index c061dabc8389b6ad4db9443e880b60c51ce946e4..d0defb095958a527243d0c88c85039fc5996aadb 100644 --- a/modules/banquepopulaire/pages.py +++ b/modules/banquepopulaire/pages.py @@ -682,6 +682,11 @@ def iter_accounts(self, next_pages): self.logger.debug('there are no cards on this page') continue + # We are processing another card, so reset account + if CleanText('.')(cols[0]) and account is not None: + yield account + account = None + id = CleanText(None).filter(cols[self.COL_ID]) if len(id) > 0: if account is not None: @@ -700,7 +705,15 @@ def iter_accounts(self, next_pages): account._coming_params = params.copy() account._coming_params['dialogActionPerformed'] = 'SELECTION_ENCOURS_CARTE' account._coming_params['attribute($SEL_$%s)' % tr.attrib['id'].split('_')[0]] = tr.attrib['id'].split('_', 1)[1] - account._coming_count = len(self.doc.xpath('//table[@id="tbl1"]/tbody/tr/td[5]/span[not(contains(text(), "(1)"))]')) + + # select current row and next rows till parent name is empty + account._coming_start = int(tr.attrib['id'].split('_', 1)[1]) + account._coming_count = 1 + for row in tr.xpath('./following-sibling::tr[./td[5]/span[not(contains(text(), "(1)"))]]'): + if CleanText('./td[2]')(row): + break + account._coming_count += 1 + elif account is None: raise BrokenPageError('Unable to find accounts on cards page') else: