Делаем скриншот веб-страницы в PyQt5 - PullRequest
1 голос
/ 19 марта 2019

Я хотел бы использовать PyQt5, чтобы сделать скриншот веб-страницы.(Полная веб-страница, включая материалы, которые пользователь не увидел бы, если бы они не прокручивали его вниз.)

Предположительно, это можно сделать в PyQt5 с помощью QtWebEngine .Как бы вы это сделали, хотя?Я специально не хочу, чтобы пользователь видел открытие или рендеринг окна браузера.Я просто хочу скриншот в PNG-файле.

1 Ответ

0 голосов
/ 19 марта 2019

-Этот код был протестирован в: QT_VERSION_STR = 5.12.1 , PYQT_VERSION_STR = 5.12

ПРИМЕЧАНИЕ: QtWebKit устарел в восходящем потоке в Qt 5.5 и удален в 5.6.

Вместо этого он заменяется на «QtWebEngineWidgets». Таким образом, вы должны внести изменения в код.

Для получения дополнительной информации: http://doc.qt.io/qt-5/qtwebenginewidgets-qtwebkitportingguide.html

from PyQt5.QtGui import QPainter, QImage
from PyQt5 import QtWebKitWidgets
from functools import partial



class Screenshot(QtWebKitWidgets.QWebView):
    def __init__(self):
        QtWebKitWidgets.QWebView.__init__(self)

    def capture(self, url, output_file):
        self.load(QUrl(url))
        self.loadFinished.connect(partial(self.onDone, output_file))

    def onDone(self,output_file):
        # 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()
        image.save(output_file)


s = Screenshot()
s.capture('https://pypi.org/project/PyQt5/', 'C:/Users/user/Desktop/web_page.png')

результат:

enter image description here

...