我正在尝试创建一个小型 Web 服务器,它使用 webkit 加载一个 URL,以从网页中提取一些数据(例如:标题、图像大小......)。
我正在使用 PyQt4 从 python 访问 webkit。对于每个请求,我正在创建一个 QThread,它: - 创建一个 QWebPage 对象, - 运行一个事件循环 - 当网页的加载完成时(loadFinished 信号),一些代码从 QWebPage 的 mainFrame 中提取数据并杀死线程
这在第一次加载时效果很好,加载了网页,包含了它的所有资源(CSS、图像)。第二次我要求服务器加载一个 url,网页被加载,但没有任何资源(没有 css,没有图像)。因此,当我尝试检索图像大小时,所有大小都设置为 0,0。
这是一些代码片段:
# 负责加载网页的 QThread
类WebKitThread(QThread):
def __init__(self, url):
QThread.__init__(self)
self.url = 网址
self.start()
定义运行(自我):
self.webkitParser = WebKitParser(self.url)
self.exec_()
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.computePageProperties()
QThread.currentThread().exit()
def 计算页面属性(自我):
# 一些读取标题、图像大小的自定义代码...
self.computedTitle=XXXXXXXX
调用代码(响应 HTTP 请求)正在执行:
t = WebKitThread(url) t.wait() # 使用 WebKitParser 的属性做一些事情 打印 t.webkitParser.computedTitle