【问题标题】:How do I rerender HTML PyQt4如何重新呈现 HTML PyQt4
【发布时间】:2015-11-13 16:57:30
【问题描述】:

我设法使用建议的代码从网页呈现 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) 的东西。

正如你可能猜到的,我不是一个程序员,我通常通过窃取我几乎不理解的代码来解决问题。但这是我第一次找不到答案,所以我想我应该自己问一个问题。

我希望我的问题足够清楚,并且有人知道答案。

【问题讨论】:

  • 感谢您的建议。这是我读过的帖子之一,认为它对我没有帮助。我会再仔细看看,如果它确实不能解决我的问题,我会解释原因
  • 建议的解决方案是处理如何呈现列表中指定的几个不同网页。如果我制作一个长列表多次指定相同的 url,这可能会起作用,但似乎不是一个有效的解决方案。我不是一个熟练的程序员,看不到如何根据需要修改代码。我希望其他人实际上已经这样做了,因为我认为这不是一个不寻常的功能。我会继续环顾四周,看看我是否找到了答案,如果我找到了,我会在这里发帖
  • 您显然没有正确阅读答案,因为它非常清楚地完全符合您的要求,只需要进行少量修改。无论如何,我已经发布了另一个简化的演示,希望能让事情变得更加清晰。

标签: html pyqt4 render


【解决方案1】:

简单演示(适应口味):

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 做事”,因为我对对象处理的了解是不存在的。我如何实际访问对象中的 html?我知道这是一个非常基本的事情,我应该能够通过学习基础知识来找出答案。这也是为什么我在这里提出问题并让人们在没有完全能够使用答案的情况下工作时有点不舒服的原因。再次感谢,我将再次详细研究这两个示例以及基本文档。
  • 啊,我在第一个例子中找到了答案,所以我只是在你的“用 html 做事”下面添加了 html = self.mainFrame().toHtml() ,它似乎有效。跨度>
猜你喜欢
  • 2011-09-09
  • 2015-07-07
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
相关资源
最近更新 更多