Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 加载带有屏幕截图框架的页面_Python_Qt_Pyqt_Qtwebkit_Qwebview - Fatal编程技术网

Python 加载带有屏幕截图框架的页面

Python 加载带有屏幕截图框架的页面,python,qt,pyqt,qtwebkit,qwebview,Python,Qt,Pyqt,Qtwebkit,Qwebview,我有一个应用程序,在iframe中呈现网页,然后在覆盖该帧的div中加载X个图像 我有一个加载url的python脚本,并截图。它可以在普通的网页上使用,但我认为框架已经过时了。下面是我的代码,以及它截图的链接 #!/usr/bin/env python import sys import signal from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import QWebPage def on

我有一个应用程序,在iframe中呈现网页,然后在覆盖该帧的div中加载X个图像

我有一个加载url的python脚本,并截图。它可以在普通的网页上使用,但我认为框架已经过时了。下面是我的代码,以及它截图的链接

#!/usr/bin/env python
import sys
import signal

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import QWebPage

def onLoadFinished(result):
    if not result:
        print "Request failed"
        sys.exit(1)

    #screen = QtGui.QDesktopWidget().screenGeometry()
    size = webpage.mainFrame().contentsSize()
    # Set the size of the (virtual) browser window
    webpage.setViewportSize(webpage.mainFrame().contentsSize())

    # Paint this frame into an image
    image = QImage(webpage.viewportSize(), QImage.Format_ARGB32)
    painter = QPainter(image)
    webpage.mainFrame().render(painter)
    painter.end()
    image.save("/var/www/html/output.png")
    sys.exit(0)


qtargs = [sys.argv[0]]
qtargs.append("-display")
qtargs.append(":0")

app = QApplication(qtargs,True)
#app = QApplication(sys.argv)
signal.signal(signal.SIGINT, signal.SIG_DFL)

webpage = QWebPage()
webpage.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)
webpage.mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)
webpage.connect(webpage, SIGNAL("loadFinished(bool)"), onLoadFinished)
webpage.mainFrame().load(QUrl("http://localhost/heatmap"))

sys.exit(app.exec_())
截图:

如上图所示,页面缩小为一个带有滚动条的小图像,而不显示带有iframe和div的整个页面。我是否需要加载样式表或强制它像在浏览器中一样进行渲染?在我的实例中,Qt.ScrollbarAlwaysOff似乎不起作用。“占位符文本”是网页的一部分,图像是使其变成灰色的,在左上角有一个蓝色的自鸣得意和颜色键

当我为我的应用程序打印webpage.mainFrame().contentsSize()的内容时,我得到 PyQt4.QtCore.QSize(400158)

但是当我渲染像www.google.com这样的东西时,我得到 PyQt4.QtCore.QSize(617573)


因此,某些内容没有正确加载,从而导致contentsSize()混乱。关于我哪里出错的想法?

一个选项是在加载页面之前,使用
QWebPage.setPreferredContentsSize()
设置一个合理的首选大小。这样,您的框架集大小将始终是首选大小。(这也将使某些页面以更合理的方式呈现,而不是使用非常小的宽度)


否则,您将需要迭代所有子帧并自己计算主帧大小,这可能会变得非常复杂,可能无法正常工作。

明天我将检查我的qt和pyqt版本,看看升级到新版本是否有帮助。刚刚注意到这两个最近的补丁。