首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置Python拍摄的屏幕截图参数

设置Python拍摄的屏幕截图参数
EN

Stack Overflow用户
提问于 2013-11-17 07:08:26
回答 1查看 416关注 0票数 1

我使用了下面的代码来拍摄网页的屏幕截图。从代码中我了解到,首先在框架中加载完整的页面,然后以画家的方式呈现框架。我面临的问题是,有些网页的内容可能非常长,但我只想要屏幕截图的第一页的网站。有什么办法可以让我处理吗?

代码语言:javascript
复制
def capture(self, url, output_file):
    self.load(QUrl(url))
    self.wait_load()
    # set to webpage size
    frame = self.page().mainFrame()
    self.page().setViewportSize(frame.contentsSize())
    # render image
    image = QImage(self.page().viewportSize(), QImage.Format_ARGB32)
    painter = QPainter(image)
    frame.render(painter)
    painter.end()
    print 'saving', output_file
    image.save(output_file)

我尝试过在QSize对象的帮助下设置框架的首选大小,但也没有帮助。或者说,我有什么办法可以裁剪图像吗?任何帮助都是非常感谢的,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-17 21:18:27

没有“第一页”这样的东西。如何划分内容完全取决于应用程序。

目前,您的脚本显式地将第一部分设置为页面的整个内容。为了避免这种情况,您应该简单地决定要捕获多少内容,然后根据需要调整viewport的大小。

下面的演示脚本使用QPrinter计算A4页面大小:

代码语言:javascript
复制
usage: capture.py url > webpage.png
代码语言:javascript
复制
from PyQt4 import QtCore, QtGui, QtWebKit

class WebPage(QtWebKit.QWebPage):
    def __init__(self):
        QtWebKit.QWebPage.__init__(self)
        self.mainFrame().setScrollBarPolicy(
            QtCore.Qt.Horizontal, QtCore.Qt.ScrollBarAlwaysOff)
        self.mainFrame().setScrollBarPolicy(
            QtCore.Qt.Vertical, QtCore.Qt.ScrollBarAlwaysOff)
        self.mainFrame().loadFinished.connect(self.handleLoadFinished)
        printer = QtGui.QPrinter()
        printer.setPaperSize(QtGui.QPrinter.A4)
        self.setViewportSize(printer.paperSize(
            QtGui.QPrinter.DevicePixel).toSize())

    def capture(self, url):
        self._url = QtCore.QUrl(url)
        QtCore.QTimer.singleShot(0, self.handleLoad)

    def handleLoad(self):
        self.mainFrame().load(self._url)

    def handleLoadFinished(self):
        image = QtGui.QImage(self.viewportSize(),
                             QtGui.QImage.Format_ARGB32)
        painter = QtGui.QPainter(image)
        self.mainFrame().render(painter)
        painter.end()
        output = QtCore.QFile()
        output.open(1, QtCore.QIODevice.WriteOnly)
        image.save(output, 'PNG')
        sys.exit(0)

if __name__ == '__main__':

    import sys, signal
    app = QtGui.QApplication(sys.argv)
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    page = WebPage()
    page.capture(sys.argv[1])
    sys.exit(app.exec_())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20028183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档