2016-02-28 4 views
0

Я использую PyQt4 в Python 3.
загружаю исходный код веб-сайта, включая все фреймов веб-сайта с этим кодом:Приложить все кадры вместе с одним 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_()) 

Этот код дает мне исходный код всех фреймов на веб-сайте.
Я хочу прикрепить все эти iframes в один файл html.
Возможно ли это?

+0

Что это значит? Вы хотите объединить все HTML вместе? Какой цели это служит? – GLaDOS

+0

Да, я хочу объединить все HTML вместе в один html-файл. Цель довольно сложная, поэтому я не могу ее объяснить. – yuval

+0

@yuval. Может быть, это «сложно», потому что вы делаете это неправильно? Это начинает выглядеть как классика [XY Problem] (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 из главный веб-кадр может не работать из-за многих вещей, например, политики междоменных. Если вас это интересует, вы можете использовать:

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

или установить только HTML с частями фреймов.

+0

Нет, но я хотел бы поместить фреймы в соответствующие теги iframe, а не просто конкатенировать кадры один за другим – yuval

+0

Пожалуйста, объясните сами, фреймы уже размещены в соответствующих тегах iframe. Кроме того, я предлагаю вам отредактировать свой вопрос, поскольку кажется, что вы хотите что-то отличное от того, что вы изначально задали. – GLaDOS

+0

@GLaDOS. Он хочет заменить «iframes» на html со страниц, которые они загружают, что, очевидно, не может работать таким упрощенным способом. – ekhumoro

1

Я уже частично ответил на этот вопрос в комментариях к answer you copied your code from. Вы не можете просто конкатенировать отдельные html-страницы на одну страницу - html forrmat просто не работает.

Есть инструменты, которые могут сохранить полную веб-страницу в один файл, но все они используют специальный формат для этого. Одним из таких форматов является MHTML, который является предлагаемым стандартом, зарегистрированным как RFC 2557. Если вы кратко взглянете на это, вы увидите, что это намного сложнее, чем просто склеивать куски html вместе.

Если вы хотите сделать это правильно, я предлагаю вам найти инструмент, поддерживающий формат MHTML.

 Смежные вопросы

  • Нет связанных вопросов^_^