我如何重新渲染 HTML PyQt4
How do I rerender HTML PyQt4
我已经设法使用建议的代码从网页呈现 HTML,然后根据需要解析、查找和使用文本。我正在使用 PyQt4。但是,我感兴趣的网页经常更新,我想重新呈现该页面并检查更新后的 HTML 以获取新信息。
因此,我的 pythonscript 中有一个循环,这样我就可以重新开始了。但是,这会使程序崩溃。我在网上搜索了一下,发现这是可以预料的,但我没有找到任何关于如何正确执行此操作的建议。应该很简单吧?
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
class Render (QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl(url))
self.app.exec_()
def _loadFinished(self, result):
self.frame = self.mainFrame()
self.app.quit()
r = Render(url)
html = r.frame.toHtml()
S,o 当我第二次点击 r=Render(url)
时,它崩溃了。 S,o 我正在寻找类似 r = Rerender(url)
的内容。
正如您可能猜到的那样,我算不上一个程序员,而且我通常通过窃取我几乎看不懂的代码来度过难关。但是我是第一次找不到答案,所以我想我应该自己问一个问题。
我希望我的问题足够清楚并且有人知道答案。
简单演示(适应口味):
import sys, signal
from PyQt4 import QtCore, QtGui, QtWebKit
class WebPage(QtWebKit.QWebPage):
def __init__(self, url):
super(WebPage, self).__init__()
self.url = url
self.mainFrame().loadFinished.connect(self.handleLoadFinished)
self.refresh()
def refresh(self):
self.mainFrame().load(QtCore.QUrl(self.url))
def handleLoadFinished(self):
print('Loaded:', self.mainFrame().url().toString())
# do stuff with html ...
print('Reloading in 3 seconds...\n')
QtCore.QTimer.singleShot(2000, self.refresh)
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal.SIG_DFL)
app = QtGui.QApplication(sys.argv)
webpage = WebPage('http://en.wikipedia.org/')
print('Press Ctrl+C to quit\n')
sys.exit(app.exec_())
我已经设法使用建议的代码从网页呈现 HTML,然后根据需要解析、查找和使用文本。我正在使用 PyQt4。但是,我感兴趣的网页经常更新,我想重新呈现该页面并检查更新后的 HTML 以获取新信息。
因此,我的 pythonscript 中有一个循环,这样我就可以重新开始了。但是,这会使程序崩溃。我在网上搜索了一下,发现这是可以预料的,但我没有找到任何关于如何正确执行此操作的建议。应该很简单吧?
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
class Render (QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl(url))
self.app.exec_()
def _loadFinished(self, result):
self.frame = self.mainFrame()
self.app.quit()
r = Render(url)
html = r.frame.toHtml()
S,o 当我第二次点击 r=Render(url)
时,它崩溃了。 S,o 我正在寻找类似 r = Rerender(url)
的内容。
正如您可能猜到的那样,我算不上一个程序员,而且我通常通过窃取我几乎看不懂的代码来度过难关。但是我是第一次找不到答案,所以我想我应该自己问一个问题。
我希望我的问题足够清楚并且有人知道答案。
简单演示(适应口味):
import sys, signal
from PyQt4 import QtCore, QtGui, QtWebKit
class WebPage(QtWebKit.QWebPage):
def __init__(self, url):
super(WebPage, self).__init__()
self.url = url
self.mainFrame().loadFinished.connect(self.handleLoadFinished)
self.refresh()
def refresh(self):
self.mainFrame().load(QtCore.QUrl(self.url))
def handleLoadFinished(self):
print('Loaded:', self.mainFrame().url().toString())
# do stuff with html ...
print('Reloading in 3 seconds...\n')
QtCore.QTimer.singleShot(2000, self.refresh)
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal.SIG_DFL)
app = QtGui.QApplication(sys.argv)
webpage = WebPage('http://en.wikipedia.org/')
print('Press Ctrl+C to quit\n')
sys.exit(app.exec_())