PySide QWebView和下载不支持的内容(PySide QWebView and downl

2019-09-18 03:12发布

下面是使用PySide为demoing的webapps等的最小浏览器的代码。 它通常充当我想,虽然我不能完全似乎让我围绕如何成功下载unsupportedContent头。

在成品方法self.reply.readAll()返回一个空的QByteArray。

任何帮助将不胜感激。 谢谢

import sys
import os
from PySide import QtCore, QtGui, QtWebKit, QtNetwork


class Browser(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.web = QtWebKit.QWebView()
        self.web.page().setForwardUnsupportedContent(True)
        self.web.page().unsupportedContent.connect(self.download)

        self.manager = QtNetwork.QNetworkAccessManager()
        self.manager.finished.connect(self.finished)

    def download(self, reply):
        self.request = QtNetwork.QNetworkRequest(reply.url())
        self.reply = self.manager.get(self.request)

    def finished(self):
        path = os.path.expanduser(os.path.join('~', unicode(self.reply.url().path()).split('/')[-1]))
        destination = QtGui.QFileDialog.getSaveFileName(self, "Save", path)
        if destination:
            filename = destination[0]
            with open(filename, 'wb') as f:
                f.write(str(self.reply.readAll()))
                f.close()


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    browser = Browser()
    browser.web.load(QtCore.QUrl('http://127.0.0.1:8000'))
    browser.web.show()

    sys.exit(app.exec_())

Answer 1:

随着帮助一个公平位找到了解决办法。 对于那些谁可能会感兴趣,是下载和完成函数的最终版本如下:

def download(self, reply):
    self.request = reply.request()
    self.request.setUrl(reply.url())
    self.reply = self.manager.get(self.request)

def finished(self):
    path = os.path.expanduser(
        os.path.join('~',
                     unicode(self.reply.url().path()).split('/')[-1]))
    if self.reply.hasRawHeader('Content-Disposition'):
        cnt_dis = self.reply.rawHeader('Content-Disposition').data()
        if cnt_dis.startswith('attachment'):
            path = cnt_dis.split('=')[1]

    destination = QtGui.QFileDialog.getSaveFileName(self, "Save", path)
    if destination:
        f = open(destination[0], 'wb')
        f.write(self.reply.readAll())
        f.flush()
        f.close()


文章来源: PySide QWebView and downloading unsupported content