繁体   English   中英

PyQt QWebKit框架错误?

[英]PyQt QWebKit frame bug?

我正在使用Python,PyQt4和QtWebKit将网页加载到准系统浏览器中以检查数据。

但是,有一个小问题。 我正在尝试获取已加载页面上每个iframe的内容和src。 我正在使用webView.page()。mainFrame()。childFrames()来获取帧。 问题在于, childFrames() 在浏览器可见的情况下才加载框架。 例如,当您的浏览器位于页面顶部时, childFrames()将不会加载位于页面底部的iframe。 有什么方法或设置可以调整我可以在哪里获得所有广告的设置? 我已经附加了“浏览器”的来源。 尝试在页面加载完成后向下滚动。 观看控制台,您将看到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_()

不确定为什么要执行操作,但是如果它只是加载可见的内容,则可以将页面视口大小设置为内容大小,并且应该加载所有内容:

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

但是,这在GUI中产生了怪异的效果,因此该解决方案对于您尝试执行的操作可能是不可接受的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM