From e5bfb9884b701b1a69459a1ba73dcc75348765a9 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 24 Sep 2015 13:22:53 +0200 Subject: [PATCH] Use WebElementWrapper instead of QWebElement * also don't derive from object * also set the _used flag on _Downloader --- qutebrowser/misc/mhtml.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/qutebrowser/misc/mhtml.py b/qutebrowser/misc/mhtml.py index 4f7aee788..c69b73fa4 100644 --- a/qutebrowser/misc/mhtml.py +++ b/qutebrowser/misc/mhtml.py @@ -32,6 +32,7 @@ from email.mime import multipart from PyQt5.QtCore import QUrl +from qutebrowser.browser import webelem from qutebrowser.utils import log, objreg, message @@ -125,7 +126,7 @@ E_QUOPRI = ("quoted-printable", _rn_quopri) """Encode the file using MIME quoted-printable encoding.""" -class MHTMLWriter(object): +class MHTMLWriter(): """A class for outputting multiple files to a MHTML document. @@ -209,7 +210,7 @@ class MHTMLWriter(object): return msg -class _Downloader(object): +class _Downloader(): """A class to download whole websites. @@ -220,6 +221,7 @@ class _Downloader(object): loaded_urls: A set of QUrls of finished asset downloads. pending_downloads: A set of unfinished (url, DownloadItem) tuples. _finished: A flag indicating if the file has already been written. + _used: A flag indicating if the downloader has already been used. """ def __init__(self, web_view, dest): @@ -229,6 +231,7 @@ class _Downloader(object): self.loaded_urls = {web_view.url()} self.pending_downloads = set() self._finished = False + self._used = False def run(self): """Download and save the page. @@ -236,6 +239,9 @@ class _Downloader(object): The object must not be reused, you should create a new one if you want to download another page. """ + if self._used: + raise ValueError("Downloader already used") + self._used = True web_url = self.web_view.url() web_frame = self.web_view.page().mainFrame() @@ -252,10 +258,12 @@ class _Downloader(object): web_frame.findAllElements("img")) for element in elements: - element_url = element.attribute("src") - if not element_url: - element_url = element.attribute("href") - if not element_url: + element = webelem.WebElementWrapper(element) + if "src" in element: + element_url = element["src"] + elif "href" in element: + element_url = element["href"] + else: # Might be a local