Я пытаюсь создать небольшой веб-сервер, который загружает, используя webkit, URL-адрес для извлечения некоторых данных с веб-страницы (например, заголовок, размеры изображений ...).
Я использую PyQt4 для доступа с python к webkit. Для каждого запроса я создаю QThread, который:
- создает объект QWebPage,
- запустить цикл обработки событий
- когда загрузка веб-страницы завершена (сигнал loadFinished), некоторый код извлекает данные из основного кадра QWebPage и убивает QThread
Это работает очень хорошо в первый раз, веб-страница загружена, включая все ее ресурсы (CSS, изображения).
Во второй раз, когда я прошу сервер загрузить URL-адрес, веб-страница загружается, но ни один из ее ресурсов (ни CSS, ни изображений). Поэтому, когда я пытаюсь получить размеры изображения, все размеры устанавливаются на 0,0.
Вот фрагмент кода:
# The QThread responsible of loading the WebPage
class WebKitThread(QThread):
def __init__(self, url):
QThread.__init__(self)
self.url = url
self.start()
def run(self):
self.webkitParser = WebKitParser(self.url)
self.exec_()
class WebKitParser(QWebPage):
def __init__(self, url, parent=None):
QWebPage.__init__(self, parent )
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl(url))
def _loadFinished(self, result):
self.computePageProperties()
QThread.currentThread().exit()
def computePageProperties(self):
# Some custom code that reads title, image size...
self.computedTitle=XXXXXXXX
Код вызова (который отвечает на запрос HTTP) выполняется:
t = WebKitThread(url)
t.wait()
# do some stuff with properties of WebKitParser
print t.webkitParser.computedTitle