【问题标题】:Set Parameters of Screenshot taken by Python设置Python截图参数
【发布时间】:2013-11-17 07:08:26
【问题描述】:

我已使用以下代码截取网页的屏幕截图。 从代码中我了解到,首先将完整的页面加载到框架中,然后在 Painter 中呈现框架。我面临的问题是某些网页在内容方面可能非常非常冗长,但我只想要网站第一页的屏幕截图。有什么办法可以解决吗?

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 对象的帮助下设置框架的首选大小,但它也无济于事。 或者,有什么办法可以裁剪图像? 非常感谢任何帮助,谢谢。

【问题讨论】:

    标签: python pyqt4 qtwebkit


    【解决方案1】:

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

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

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

    usage: capture.py url > webpage.png
    
    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_())
    

    【讨论】:

      【解决方案2】:

      你能把图片调整成你的屏幕大小吗

      导入gtk,pygtk def 捕获(自我,网址,输出文件): self.load(QUrl(url)) self.wait_load() # 设置为网页大小 框架 = self.page().mainFrame() self.page().setViewportSize(frame.contentsSize()) # 渲染图像 图像 = QImage(self.page().viewportSize(), QImage.Format_ARGB32) 画家= QPainter(图像) frame.render(画家) 画家.end() 窗口 = gtk.Window() s = window.get_screen() image = image.resize((s.get_width(),s.get_height()), Image.ANTIALIAS) 打印'保存',输出文件 图像.保存(输出文件)

      【讨论】:

      • 它是如何回答问题的?
      猜你喜欢
      • 2020-11-12
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2015-02-19
      • 2012-11-08
      • 2021-06-01
      • 2013-10-17
      • 2012-07-10
      相关资源
      最近更新 更多