QWebEngineView - 加载> 2mb的内容

时间:2018-02-22 12:05:05

标签: html qt pyqt5 qwebengineview

因此,使用PyQt5的QWebEngineView和.setHTML和.setContent方法有2 MB的大小限制。当谷歌搜索解决方案时,我发现了两种方法:

使用SimpleHTTPServer提供文件。然而,这会受到公司使用的防火墙的影响。

使用文件管理并指向本地文件。然而,这是一个相当糟糕的解决方案,因为HTML包含机密数据,在任何情况下我都不能将它留在硬盘上。

我目前看到的最佳解决方案是使用文件网址,并在程序退出时删除文件/当loadCompleted报告完成时,以先到者为准。

然而,这不是一个很好的解决方案,我想问一下我是否有一个解决方案可以更好的解决方案?

2 个答案:

答案 0 :(得分:2)

为什么不通过自定义网址方案处理程序加载/链接大部分内容?

webEngineView->page()->profile()->installUrlSchemeHandler("app", new UrlSchemeHandler(e));

class UrlSchemeHandler : public QWebEngineUrlSchemeHandler
{   Q_OBJECT
public:
    void requestStarted(QWebEngineUrlRequestJob *request) {
        QUrl url = request->requestUrl();
        QString filePath = url.path().mid(1);
        // get the data for this url
        QByteArray data = ..
        // 
        if (!data.isEmpty()) 
        {
            QMimeDatabase db;
            QString contentType = db.mimeTypeForFileNameAndData(filePath,data).name();
            QBuffer *buffer = new QBuffer();
            buffer->open(QIODevice::WriteOnly);
            buffer->write(data);
            buffer->close();
            connect(request, SIGNAL(destroyed()), buffer, SLOT(deleteLater()));
            request->reply(contentType.toUtf8(), buffer);
        } else {
            request->fail(QWebEngineUrlRequestJob::UrlNotFound);
        }
    }
};

然后您可以按webEngineView->load(new QUrl("app://start.html"));

加载网站

来自内部的所有相关广告也将转发到您的UrlSchemeHandler ..

答案 1 :(得分:0)

解决这个问题的一种方法是使用requests和QWebEnginePage的方法runJavaScript

web_engine = QWebEngineView()
web_page = web_engine.page()
web_page.setHtml('')

url = 'https://youtube.com'
page_content = requests.get(url).text

# document.write writes a string of text to a document stream
# https://developer.mozilla.org/en-US/docs/Web/API/Document/write
# And backtick symbol(``) is for multiline strings
web_page.runJavaScript('document.write(`{}`);'.format(page_content))