Ошибка кадра PyQt QWebKit?

Я использую Python, PyQt4 и QtWebKit для загрузки веб-страницы в простой браузер для изучения данных.

Однако есть небольшая проблема. Я пытаюсь получить содержимое и src каждого iframe на загруженной странице. Я использую webView.page().mainFrame().childFrames() для получения фреймов. Проблема в том, что childFrames() загружает фреймы ТОЛЬКО, если они видны браузеру. Например, когда ваш браузер расположен в верхней части страницы, childFrames() не будет загружать iframe в нижнем колонтитуле страницы. Есть ли способ или настройка, которую я мог бы настроить, где я могу получить всю рекламу? Я приложил источник моего "браузера". Попробуйте прокрутить вниз, когда страница завершит загрузку. Посмотрите на консоль, и вы увидите, что фреймы загружаются динамически. Пожалуйста помоги.

from PyQt4 import QtGui, QtCore, QtWebKit
import sys
import unicodedata


class Sp():
    def Main(self):
        self.webView = QtWebKit.QWebView()
        self.webView.load(QtCore.QUrl("http://www.msnbc.msn.com/id/41197838/ns/us_news-environment/"))
        self.webView.show()
        QtCore.QObject.connect(self.webView,QtCore.SIGNAL("loadFinished(bool)"),self.Load)


def Load(self):
    frame = self.webView.page().mainFrame()
    children = frame.childFrames()
    fT = []


    for x in children:
        print "=========================================="
        print unicodedata.normalize('NFKD', unicode(x.url().toString())).encode('ascii','ignore')
        print "=========================================="
        fT.append([unicode(x.url().toString()),unicode(x.toHtml()),[]])


    for x in range(len(fT)):
        f = children[x]
        tl = []
        for fx in f.childFrames():
            print "___________________________________________"
            print unicodedata.normalize('NFKD', unicode(fx.url().toString())).encode('ascii','ignore')
            print "___________________________________________"
            tl.append([unicode(fx.url().toString()),unicode(fx.toHtml()),[]])
        fT[x][2] = tl


app = QtGui.QApplication(sys.argv)
s = Sp()
s.Main()
app.exec_()

person enderskill    schedule 22.01.2011    source источник
comment
Какова цель, и почему это не может быть достигнуто путем разбора HTML вместо того, чтобы запрашивать WebKit для его структуры?   -  person Apalala    schedule 22.01.2011
comment
QWebKit имеет возможность анализировать javascript. Обычный синтаксический анализ HTML не делает это.   -  person enderskill    schedule 22.08.2011


Ответы (1)


Не уверен, почему вы делаете то, что делаете, но если вы загружаете только то, что видно, вы можете установить размер области просмотра страницы на размер содержимого, и это должно загружать все:

def Load(self):
    self.webView.page().setViewportSize(
        self.webView.page().mainFrame().contentsSize())

Однако это имеет странный эффект в графическом интерфейсе, поэтому это решение может быть неприемлемым для того, что вы пытаетесь сделать.

person gschwa    schedule 27.04.2011
comment
Спасибо, это было именно то, что я искал. К счастью, эта программа работает на безголовом сервере Ubuntu с xvfb. Из-за этого окно ненормального размера не будет проблемой. - person enderskill; 22.08.2011