2016-02-28 25 views
0

我使用PyQt4的在Python 3
我打開一個網站的源代碼,包括網站的這個代碼的所有I幀:附上所有幀一起一個HTML,PyQt4的

import sys, signal, time 
from PyQt4 import QtGui, QtCore, QtWebKit 
class Sp(): 
    def save(self, ok, frame=None): 
    if frame is None: 
     print ('main-frame') 
     frame = self.webView.page().mainFrame() 
    else: 
     print('child-frame') 
    print('Time: ' + str(time.time() - startTime)) 
    print('URL: %s' % frame.baseUrl().toString()) 
    print('METADATA: %s' % frame.metaData()) 
    print('TAG: %s' % frame.documentElement().tagName()) 
    print('HTML: ' + frame.documentElement().toInnerXml()) 
    print() 

    def handleFrameCreated(self, frame): 
    frame.loadFinished.connect(lambda: self.save(True, frame=frame)) 

    def main(self): 
    self.webView = QtWebKit.QWebView() 
    self.webView.page().frameCreated.connect(self.handleFrameCreated) 
    self.webView.page().mainFrame().loadFinished.connect(self.save) 
    self.webView.load(QtCore.QUrl("http://10.0.0.101/default.htm")) 

startTime = time.time() 
signal.signal(signal.SIGINT, signal.SIG_DFL) 
print('Press Crtl+C to quit\n') 
app = QtGui.QApplication(sys.argv) 
s = Sp() 
s.main() 
sys.exit(app.exec_()) 

此代碼給我網站中所有iframe的源代碼。
我想將所有這些iframe附加到一個html文件中。
這可能嗎?

+0

這是什麼意思?你想連接所有的HTML在一起嗎?它的用途是什麼? – GLaDOS

+0

是的,我想連接所有的HTML到一個HTML文件。目的很複雜,所以我無法解釋它。 – yuval

+0

@yuval。也許這是「複雜的」,因爲你正在以錯誤的方式去解決它?這開始看起來像一個經典的[XY問題](http://xyproblem.info/)。 – ekhumoro

回答

0

如果你感興趣的只是連接所有網頁的HTML,您可以添加將包含所有的HTML在一起的屬性,並獲得與HTML:

class Sp(): 
    all_html = '' 

    def save(self, ok, frame=None): 
     if frame is None: 
      print ('main-frame') 
      frame = self.webView.page().mainFrame() 
     else: 
      print('child-frame') 
     self.all_html += frame.toHtml() 
     print('Time: ' + str(time.time() - startTime)) 
     print('URL: %s' % frame.baseUrl().toString()) 
     print('METADATA: %s' % frame.metaData()) 
     print('TAG: %s' % frame.documentElement().tagName()) 
     print('HTML: ' + frame.documentElement().toInnerXml()) 
     print() 

設定的在HTML主要的webframe可能無法正常工作,例如跨域策略。如果您有興趣,但可以使用:

self.webView.page().mainFrame().setHtml(self.all_html) 

或者只設置HTML的部分框架。

+0

不,但我想將框架放置在其相關的iframe標籤中,而不僅僅是連續連接框架 – yuval

+0

請解釋您自己,這些框架已被放置在其相關的iframe標籤中。另外,我建議你編輯你的問題,因爲它看起來像你想要的東西不同於你最初的問題。 – GLaDOS

+0

@GLaDOS。他希望用他們加載的頁面中的html代替'iframes' - 這顯然不可能以這種簡單的方式工作。 – ekhumoro

1

我已經在answer you copied your code from的評論中部分回答了這個問題。你不能簡單地將單獨的html頁面連接成一個頁面--html forrmat只是不能這樣工作。

有一些工具可以將完整的網頁保存到一個文件中,但它們都使用特殊的格式來完成它。一種這樣的格式是MHTML,這是一個建議的標準,記錄爲RFC 2557。如果你簡單地看一下它,你會發現它比簡單地將大塊html粘合在一起要複雜得多。

如果你想正確地做到這一點,我會建議你尋找一種支持MHTML格式的工具。

相關問題