iframe で Web ページをレンダリングし、フレームをオーバーレイする div に X 個の画像を読み込むアプリがあります。
だから私はURLをロードしてスクリーンショットを撮るこのpythonスクリプトを持っています。通常の Web ページでは動作しますが、フレームがおかしいと思います。以下は私のコードと、それが取っているスクリーンショットへのリンクです。
#!/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 は、私のインスタンスでは実際には機能していないようです。「プレースホルダー テキスト」は Web ページの一部であり、画像がグレーのようなもので、左上に青いスマグとカラー キーがあります。
アプリの webpage.mainFrame().contentsSize() の内容を印刷すると、 PyQt4.QtCore.QSize(400, 158) が表示されます
しかし、www.google.com のようなものをレンダリングすると、PyQt4.QtCore.QSize(617, 573) が得られます。
そのため、contentsSize() を台無しにするために何かが適切にロードされていません。どこが間違っているかについてのアイデアはありますか?