正在为screensh加载带有框架的页面

2024-10-03 17:24:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序在iframe中呈现网页,然后在覆盖框架的div中加载X个数量的图像。在

所以我有一个python脚本来加载url并截图。它可以在普通网页上运行,但我认为框架会把它扔掉。下面是我的代码,以及截图的链接。在

#!/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_())

截图: http://img28.imageshack.us/img28/7506/outputc.png

正如您在上面的图片中看到的,页面被缩小成一个带有滚动条的小图像,而不是在上面显示iframe和div的整个页面。我是否需要加载样式表或强制它呈现在浏览器中?Qt.ScrollbarAlwaysOff公司在我的情况下似乎不起作用。“占位符文本”是网页的一部分,而图像是使它有点灰色的东西,在左上角有一个蓝色的自鸣器和颜色键。在

当我打印网页.mainFrame().contentsSize()对于我的应用,我得到 PyQt4。QtCore.QSize大小(400,158)

但是当我渲染出www.google.com,我明白了 PyQt4。QtCore.QSize大小(617573)

因此某些内容没有正确加载,从而使contentsSize()混乱。我哪里出错了?在


Tags: from图像imageimport网页signalsysexit
1条回答
网友
1楼 · 发布于 2024-10-03 17:24:46

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

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

相关问题 更多 >