From ce7e019e9ae5fa591bfc1f9dfcfa337fa20aa1b3 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Sat, 11 Oct 2014 14:03:05 +0200 Subject: [PATCH] fix unfinite loop on fail login, and fix error message lookup --- modules/gazelle/browser.py | 10 ++++++++-- modules/gazelle/pages/index.py | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/gazelle/browser.py b/modules/gazelle/browser.py index 144a4632..1bf4692f 100644 --- a/modules/gazelle/browser.py +++ b/modules/gazelle/browser.py @@ -18,7 +18,7 @@ # along with weboob. If not, see . -from weboob.deprecated.browser import Browser +from weboob.deprecated.browser import Browser, BrowserIncorrectPassword from .pages.index import IndexPage, LoginPage from .pages.torrents import TorrentsPage @@ -29,7 +29,7 @@ __all__ = ['GazelleBrowser'] class GazelleBrowser(Browser): PAGES = {'https?://[^/]+/?(index.php)?': IndexPage, - 'https?://[^/]+/login.php': LoginPage, + 'https?://[^/]+/login.php.*': LoginPage, 'https?://[^/]+/torrents.php.*': TorrentsPage, } @@ -43,6 +43,12 @@ class GazelleBrowser(Browser): self.location('/login.php', no_login=True) self.page.login(self.username, self.password) + # If we are not logged, the on_loaded event on LoginPage has probably + # raised the exception, but to be sure, check here to prevent an + # unfinite loop if we can't find the error message. + if self.is_on_page(LoginPage): + raise BrowserIncorrectPassword() + def is_logged(self): if not self.page or self.is_on_page(LoginPage): return False diff --git a/modules/gazelle/pages/index.py b/modules/gazelle/pages/index.py index 3d4aac62..1e96c3b6 100644 --- a/modules/gazelle/pages/index.py +++ b/modules/gazelle/pages/index.py @@ -31,10 +31,10 @@ class LoginPage(BasePage): def on_loaded(self): BasePage.on_loaded(self) - warns = self.parser.select(self.document.getroot(), 'span.warning') + warns = self.parser.select(self.document.getroot(), '.warning') for warn in warns: text = self.parser.tocleanstring(warn) - if text.startswith('Your username'): + if text.startswith('Your '): raise BrowserIncorrectPassword(text) if text.startswith('You are banned'): raise BrowserBanned(text) @@ -43,4 +43,4 @@ class LoginPage(BasePage): self.browser.select_form(nr=0) self.browser['username'] = login self.browser['password'] = password - self.browser.submit() + self.browser.submit(no_login=True)