Различные объекты QWebView производят одинаковый вывод для одних и тех же URL-адресов.

Я обнаружил, что если мы загрузим один URL-адрес с разными объектами QWebView параллельно, мы получим идентичный результат: только один из этих 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

Как мы можем получить «справедливый», уникальный вывод для каждого объекта QWebView, если URL-адрес тот же?

PyQt 5.4, окна 7


person Mikhail Gerasimov    schedule 11.02.2015    source источник
comment
Необходимо указать используемые версии Python, PyQt, ОС.   -  person Trilarion    schedule 12.02.2015
comment
Попробуйте отключить кеширование страниц. В C++ это делается с помощью:QWebSettings::globalSettings()- ›setMaximumPagesInCache(0); 72 QWebSettings::globalSettings ()- ›setObjectCacheCapacities (0, 0, 0); Я считаю, что в питоне есть что-то подобное.   -  person MKAROL    schedule 12.02.2015
comment
@MKarol В качестве дополнительного комментария (ранее он был ошибочно опубликован как ответ): я не вижу такого поведения в Python 3.4.2, PySide 1.2.2 (Qt 4.8), Windows 7, все 64-битные, даже если для objectcachecapacities установлено значение нечто ненулевое. Так что это может быть специфично для реализации.   -  person Trilarion    schedule 12.02.2015


Ответы (1)


Решение - отключить кеш:

view.page().settings().setObjectCacheCapacities(0, 0, 0)
person Mikhail Gerasimov    schedule 11.02.2015