Python 加载带有屏幕截图框架的页面
我有一个应用程序,在iframe中呈现网页,然后在覆盖该帧的div中加载X个图像 我有一个加载url的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
#!/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版本,看看升级到新版本是否有帮助。刚刚注意到这两个最近的补丁。