为什么在某些网站(例如youtube)上多次调用QWebView.loadFinished?

发布于 2021-01-29 16:03:40

根据文档,应该仅在所有页面元素完成加载后才发出loadFinished。这应该意味着它只会被调用一次,但是我注意到在youtube.com等网站上,它被调用了两次?还有什么其他方法可以解决此
错误, 或者什么是检测page.load事件的最可靠方法?

这是测试代码:

import sys
from PyQt4 import QtCore, QtGui, QtWebKit
from PyQt4.QtCore import QUrl
from PyQt4.QtGui import QApplication

def onDone(val):
    print "Done ...",val

def onStart():
    print "Started..."

app = QApplication(sys.argv)
ui =  QtWebKit.QWebView()
ui.loadStarted.connect(onStart)
ui.loadFinished.connect(onDone)

ui.load(QUrl("http://www.youtube.com"))   
ui.showMaximized()
sys.exit(app.exec_())

输出:

Started...
Done ... True
Started...
Done ... True

编辑:有一个几乎相同的问题,但它已经> 2年,但仍未得到答复。

关注者
0
被浏览
45
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    load*信号被一次被加载每一帧发射。

    要仅捕获第一组信号,请连接到主机的相应信号:

    ui.page().mainFrame().loadStarted.connect(onStart)
    ui.page().mainFrame().loadFinished.connect(onDone)
    

    您可以通过连接到frameCreated信号来验证是否正在加载其他帧,该信号将在加载主帧后为
    随后 创建的每个 后续 帧触发一次:

    def onFrame(val):
        print 'Frame Created:', val.frameName()
    
    ui.page().frameCreated.connect(onFrame)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看