Ошибка кадра PyQt QWebKit? - PullRequest
       16

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

0 голосов
/ 22 января 2011

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

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

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

1 Ответ

0 голосов
/ 28 апреля 2011

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

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

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

...