From afbf9adf3ed591d5d406b1f0db7ff76c63b02a17 Mon Sep 17 00:00:00 2001 From: Pierre Nardozi Date: Mon, 17 Aug 2020 18:20:57 +0200 Subject: [PATCH] [orange] add new profile page for pro --- modules/orange/browser.py | 26 ++++++++++++++++---------- modules/orange/pages/profile.py | 18 +++++++++++++++++- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/modules/orange/browser.py b/modules/orange/browser.py index b2d06d9e98..3d2dacbadd 100644 --- a/modules/orange/browser.py +++ b/modules/orange/browser.py @@ -29,7 +29,7 @@ SubscriptionsPage, SubscriptionsApiPage, BillsApiProPage, BillsApiParPage, ContractsPage, ContractsApiPage ) -from .pages.profile import ProfilePage +from .pages.profile import ProfileParPage, ProfileProPage from weboob.browser.exceptions import ClientError, ServerError from weboob.tools.compat import basestring from weboob.tools.decorators import retry @@ -41,9 +41,11 @@ class OrangeBillBrowser(LoginBrowser, StatesMixin): TIMEOUT = 60 + STATE_DURATION = 20 + BASEURL = 'https://espaceclientv3.orange.fr' - home_page = URL(r'https://businesslounge.orange.fr/$', HomePage) + home_page = URL(r'https://businesslounge.orange.fr/?$', HomePage) portal_page = URL(r'https://www.orange.fr/portail', PortalPage) loginpage = URL( r'https://login.orange.fr/\?service=sosh&return_url=https://www.sosh.fr/', @@ -83,7 +85,8 @@ class OrangeBillBrowser(LoginBrowser, StatesMixin): doc_api_par = URL(r'https://sso-f.orange.fr/omoi_erb/facture/v1.0/pdf') doc_api_pro = URL(r'https://espaceclientpro.orange.fr/api/contract/(?P\d+)/bill/(?P.*)/(?P.*)/\?(?P)') - profile = URL(r'/\?page=profil-infosPerso', ProfilePage) + profile_par = URL(r'/\?page=profil-infosPerso', ProfileParPage) + profile_pro = URL(r'https://businesslounge.orange.fr/profil', ProfileProPage) def locate_browser(self, state): try: @@ -136,12 +139,12 @@ def _iter_subscriptions_by_type(self, name, _type): @need_login def get_subscription_list(self): try: - self.profile.go() - - if not (self.profile.is_here() or self.manage_cgi.is_here()): - self.session.cookies.clear() - self.do_login() - self.profile.go() + # look at the type of account, pro or par and associates the right profile page + self.portal_page.go() + if self.home_page.is_here(): + self.profile_pro.go() + else: + self.profile_par.go() # we land on manage_cgi page when there is cgu to validate if self.manage_cgi.is_here(): @@ -236,4 +239,7 @@ def iter_documents(self, subscription): @need_login def get_profile(self): - return self.profile.go().get_profile() + self.profile_par.go() + if not self.profile_par.is_here(): + self.profile_pro.go() + return self.page.get_profile() diff --git a/modules/orange/pages/profile.py b/modules/orange/pages/profile.py index 0e53af45f0..1410aa7edb 100644 --- a/modules/orange/pages/profile.py +++ b/modules/orange/pages/profile.py @@ -24,7 +24,7 @@ from weboob.browser.filters.standard import CleanText, Format -class ProfilePage(LoggedPage, HTMLPage): +class ProfileParPage(LoggedPage, HTMLPage): def get_profile(self): pr = Profile() pr.email = CleanText('//span[contains(@class, "panelAccount-label") and strong[contains(text(), "Adresse email")]]/following::span[1]/strong')(self.doc) @@ -59,3 +59,19 @@ def get_profile(self): pr.name = CleanText('//p[contains(@class, "panelAccount-label")]/span[strong[text()="Nom :"]]/following::span[1]')(self.doc) return pr + +class ProfileProPage(LoggedPage, HTMLPage): + def get_profile(self): + pr = Profile() + + pr.email = CleanText('//input[@id="profile_email"]/@value')(self.doc) + + pr.name = Format( + '%s %s', + CleanText('//input[@id="profile_lastName"]/@value'), + CleanText('//input[@id="profile_firstName"]/@value'), + )(self.doc) + + pr.phone = CleanText('//div[contains(@class, "main-header-profile")][1]//div[@class="h2"]')(self.doc) + + return pr -- GitLab