From 1e1a118b3fdf0a4899e063ac9fe74d678da60d12 Mon Sep 17 00:00:00 2001 From: Pierre Nardozi Date: Tue, 18 Aug 2020 15:51:06 +0200 Subject: [PATCH] [amazon] adding a new page for expired password --- modules/amazon/browser.py | 8 ++++++-- modules/amazon/pages.py | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/amazon/browser.py b/modules/amazon/browser.py index 3e2fae7f4a..630cfc74b0 100644 --- a/modules/amazon/browser.py +++ b/modules/amazon/browser.py @@ -23,14 +23,14 @@ from weboob.browser import LoginBrowser, URL, need_login, StatesMixin from weboob.exceptions import ( BrowserIncorrectPassword, BrowserUnavailable, ImageCaptchaQuestion, BrowserQuestion, - WrongCaptchaResponse, AuthMethodNotImplemented, NeedInteractiveFor2FA, + WrongCaptchaResponse, AuthMethodNotImplemented, NeedInteractiveFor2FA, BrowserPasswordExpired, ) from weboob.tools.value import Value from weboob.browser.browsers import ClientError from .pages import ( LoginPage, SubscriptionsPage, DocumentsPage, DownloadDocumentPage, HomePage, - PanelPage, SecurityPage, LanguagePage, HistoryPage, + PanelPage, SecurityPage, LanguagePage, HistoryPage, PasswordExpired, ) @@ -68,6 +68,7 @@ class AmazonBrowser(LoginBrowser, StatesMixin): SecurityPage, ) language = URL(r'/gp/customer-preferences/save-settings/ref=icp_lop_(?P.*)_tn', LanguagePage) + password_expired = URL(r'/ap/forgotpassword/reverification', PasswordExpired) __states__ = ('otp_form', 'otp_url', 'otp_style', 'otp_headers') @@ -188,6 +189,9 @@ def do_login(self): self.page.login(self.username, self.password) + if self.password_expired.is_here(): + raise BrowserPasswordExpired(self.page.get_message()) + if self.security.is_here(): # Raise security management self.handle_security() diff --git a/modules/amazon/pages.py b/modules/amazon/pages.py index 3e90894585..0ca7b0241c 100644 --- a/modules/amazon/pages.py +++ b/modules/amazon/pages.py @@ -125,6 +125,11 @@ def get_error_message(self): return CleanText('//div[@id="auth-error-message-box"]')(self.doc) +class PasswordExpired(HTMLPage): + def get_message(self): + return CleanText('//form//h2')(self.doc) + + class SubscriptionsPage(LoggedPage, HTMLPage): @method class get_item(ItemElement): -- GitLab