diff --git a/weboob/tools/browser2/__init__.py b/weboob/tools/browser2/__init__.py index 576e0cc8..2f736dd2 100644 --- a/weboob/tools/browser2/__init__.py +++ b/weboob/tools/browser2/__init__.py @@ -18,8 +18,8 @@ # along with weboob. If not, see . from .browser import BaseBrowser, DomainBrowser, Wget, Firefox, UrlNotAllowed, Profile -from .page import PagesBrowser, BasePage, URL, HTMLPage, LoginBrowser, need_login, JsonPage, LoggedPage +from .page import PagesBrowser, BasePage, URL, HTMLPage, LoginBrowser, need_login, JsonPage, LoggedPage, XMLPage -__all__ = ['BaseBrowser', 'DomainBrowser', 'Wget', 'Firefox', 'UrlNotAllowed', 'Profile', +__all__ = ['BaseBrowser', 'DomainBrowser', 'Wget', 'Firefox', 'UrlNotAllowed', 'Profile', 'XMLPage', 'PagesBrowser', 'BasePage', 'URL', 'HTMLPage', 'LoginBrowser', 'need_login', 'JsonPage', 'LoggedPage'] diff --git a/weboob/tools/browser2/page.py b/weboob/tools/browser2/page.py index abb1aa05..cb286865 100644 --- a/weboob/tools/browser2/page.py +++ b/weboob/tools/browser2/page.py @@ -26,6 +26,7 @@ import sys from copy import deepcopy from cStringIO import StringIO import lxml.html as html +import lxml.etree as etree from weboob.tools.json import json from weboob.tools.ordereddict import OrderedDict @@ -332,7 +333,7 @@ class LoginBrowser(PagesBrowser): self.password = password def do_login(self): - """" + """ Abstract method to implement to login on website. It is call when a login is needed. @@ -417,12 +418,20 @@ class Form(OrderedDict): """ return self.page.browser.location(self.request) + class JsonPage(BasePage): def __init__(self, browser, response, *args, **kwargs): super(JsonPage, self).__init__(browser, response, *args, **kwargs) self.doc = json.loads(response.text) +class XMLPage(BasePage): + def __init__(self, browser, response, *args, **kwargs): + super(XMLPage, self).__init__(browser, response, *args, **kwargs) + parser = etree.XMLParser(encoding=response.encoding) + self.doc = etree.parse(StringIO(response.content), parser) + + class RawPage(BasePage): def __init__(self, browser, response, *args, **kwargs): super(RawPage, self).__init__(browser, response, *args, **kwargs)