【问题标题】:Different QWebView objects produce identical output for same urls不同的 QWebView 对象为相同的 url 产生相同的输出
【发布时间】:2015-02-12 07:11:40
【问题描述】:

我发现如果我们用不同的 QWebView 对象并行加载一个 url,我们将得到相同的输出:只有这个 QWebView 中的一个会发出真正的请求。这是一个例子:

from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebKitWidgets import QWebView

def load_and_print(url):
    view = QWebView()
    view.load(QUrl(url))
    def on_ready(ok):
        print(view.page().mainFrame().documentElement().toPlainText())
    view.loadFinished.connect(on_ready)

if __name__ == '__main__':
    app = QApplication([])

    # This url outputs random number:
    url = 'https://www.random.org/integers/?num=1&min=1&max=100&col=1&base=10&format=plain&rnd=new'
    load_and_print(url)
    load_and_print(url)

    app.exec_()

    # output:
    # 39
    # 39

如果 url 相同,我们如何才能为每个 QWebView 对象获得“公平”、唯一的输出?

PyQt 5.4,Windows 7

【问题讨论】:

  • 您应该指定使用的 Python、PyQt、操作系统版本。
  • 尝试禁用缓存页面。在 C++ 中,它是通过使用:QWebSettings::globalSettings ()->setMaximumPagesInCache (0); 72 QWebSettings::globalSettings ()->setObjectCacheCapacities (0, 0, 0);我相信在 python 中也有类似的东西。
  • @MKarol 正如附加评论(之前错误地发布为答案):我在 Python 3.4.2、PySide 1.2.2 (Qt 4.8)、Windows 7 all 64 bit 上看不到这种行为,即使 objectcachecapacities 设置为非零值。所以它可能是特定于实现的。

标签: qt pyqt qwebview


【解决方案1】:

解决办法是禁用缓存:

view.page().settings().setObjectCacheCapacities(0, 0, 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2015-04-22
    相关资源
    最近更新 更多