From a0c79c1842c2f4c830cade5df2e389f58266e15e Mon Sep 17 00:00:00 2001 From: Christophe Francois Date: Thu, 11 Jun 2020 16:18:49 +0200 Subject: [PATCH] [cmes] Handle new action needed --- modules/cmes/browser.py | 23 +++++++++++++++++++++-- modules/cmes/pages.py | 23 ++++------------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/modules/cmes/browser.py b/modules/cmes/browser.py index bac7a741ad..989e401bbd 100644 --- a/modules/cmes/browser.py +++ b/modules/cmes/browser.py @@ -23,7 +23,7 @@ from dateutil.relativedelta import relativedelta from weboob.browser import LoginBrowser, URL, need_login -from weboob.exceptions import BrowserIncorrectPassword +from weboob.exceptions import BrowserIncorrectPassword, ActionNeeded from .pages import ( LoginPage, AccountsPage, OperationsListPage, OperationPage, ActionNeededPage, InvestmentPage, InvestmentDetailsPage, AssetManagementPage, @@ -36,7 +36,8 @@ class CmesBrowser(LoginBrowser): login = URL(r'(?P.*)fr/identification/authentification.html', LoginPage) action_needed = URL( - r'(?P.*)(?P.*)fr/epargnants/premiers-pas/saisir-vos-coordonnees.*', + r'(?P.*)(?P.*)fr/epargnants/premiers-pas/saisir-vos-coordonnees', + r'(?P.*)(?P.*)fr/epargnants/premiers-pas/vos-services', r'(?P.*)(?P.*)fr/epargnants/conditions-generales-d-utilisation/index.html', ActionNeededPage ) @@ -81,6 +82,24 @@ def do_login(self): @need_login def iter_accounts(self): self.accounts.go(subsite=self.subsite, client_space=self.client_space) + + if self.action_needed.is_here(): + # Sometimes the page is skippable + skip_url = self.page.get_skip_url() + if skip_url: + self.location(skip_url) + else: + msg = self.page.get_message() + if any(( + "Merci de renseigner votre adresse e-mail" in msg, + "Merci de renseigner votre numéro de téléphone mobile" in msg, + "Veuillez accepter les conditions générales d'utilisation" in msg, + "Vos services" in msg, + )): + raise ActionNeeded(msg) + else: + raise AssertionError('Unhandled action needed: %s' % msg) + return self.page.iter_accounts() @need_login diff --git a/modules/cmes/pages.py b/modules/cmes/pages.py index e6e5ae5990..bf3a8b400f 100644 --- a/modules/cmes/pages.py +++ b/modules/cmes/pages.py @@ -31,7 +31,6 @@ from weboob.capabilities.bank import Account, NotAvailable from weboob.capabilities.wealth import Investment, Pocket from weboob.tools.capabilities.bank.transactions import FrenchTransaction -from weboob.exceptions import ActionNeeded class Transaction(FrenchTransaction): @@ -57,25 +56,11 @@ def login(self, login, password): class ActionNeededPage(HTMLPage, LoggedPage): - def on_load(self): - # Need to update mail. Try to skip - msg = "Merci de renseigner votre adresse e-mail" - if CleanText('//p[@role="heading" and contains(text(), "%s")]' % msg)(self.doc): - url = Link('//a[contains(., "PASSER CETTE ETAPE")]', default=None)(self.doc) - if url: - self.browser.location(url) - else: - raise ActionNeeded(msg) - - # Mobile phone update can not be skipped - msg = "Merci de renseigner votre numéro de téléphone mobile" - if CleanText('//p[@role="heading" and contains(text(), "%s")]' % msg)(self.doc): - raise ActionNeeded(msg) + def get_message(self): + return CleanText('//p[@role="heading"]')(self.doc) - # CGU, can not bypass - msg = "Veuillez accepter les conditions générales d'utilisation" - if CleanText('//p[@role="heading" and contains(text(), "%s")]' % msg)(self.doc): - raise ActionNeeded(msg) + def get_skip_url(self): + return Link('//a[contains(., "PASSER CETTE ETAPE")]', default=None)(self.doc) ACCOUNTS_TYPES = { -- GitLab