我正在尝试创建一个小型 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