2015-11-13 167 views
1

我已經設法使用建議的代碼,以便從網頁呈現HTML,然後解析,查找並使用所需的文本。我正在使用PyQt4。但是,我感興趣的網頁經常更新,我想重新渲染頁面並檢查更新的HTML以獲取新信息。我如何重新渲染HTML PyQt4

因此,我在我的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)的東西。你可能會猜到,我並不是一個程序員,我通常會通過竊取我幾乎不瞭解的代碼來獲取。但這是我第一次找不到答案,所以我想我應該自己提出一個問題。

我希望我的問題很清楚,並且有人有答案。

+0

的[PyQt的類沒有第二個使用工作]可能的複製(http://stackoverflow.com/questions/21909907/pyqt-class-not-用於第二次使用) – ekhumoro

+0

感謝您的建議。這是我閱讀的帖子之一,並沒有想到它會幫助我。我會再仔細看看,如果它確實不能解決我的問題,我將解釋爲什麼 – Pal

+0

建議的解決方案是處理如何呈現列表中指定的幾個不同的網頁。這可能會工作,如果我做一個長列表多次指定相同的網址,但似乎並不是一個有效的解決方案。我不是一個足夠熟練的程序員,不知道如何根據需要修改代碼。我的希望是,其他人真的做到了這一點,因爲我認爲這不是一個非常規的功能。我會繼續環顧四周,看看我是否找到答案,如果我找到答案,會在這裏發帖 – Pal

回答

0

簡單的演示(適應味):

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_()) 
+0

再次感謝。你的例子是給我一個網頁對象,根據需要刷新。我現在的問題是,我不知道如何「用HTML做東西」,因爲我的對象處理知識是不存在的。我如何實際訪問對象中的html?我知道這是一個非常基本的東西,我應該能夠通過學習基礎知識來找到答案。這也是爲什麼我在這裏提出問題並讓工作人員沒有完全有能力使用答案時感到有點不舒服。再次感謝,我將再次看到這兩個例子以及基本文檔。 – Pal

+0

啊,我在第一個例子中找到了答案,所以我只是在你的「用html做東西」下面添加了html = self.mainFrame()。toHtml(),它似乎工作。 – Pal