banner

Делаем скриншоты сайтов

Многие не раз задавались вопросом, как получить скриншот сайта в автоматическом режиме.
Сегодня я покажу как с помощью PyQt4.QtWebKit можно сделать скриншот без использования браузеров и непосредственного скриншотинга их .
Данный скрипт на безиксовых unixlike os не проверялся, но думаю особых проблем возникнуть не должно.

Ах да, копипастерам: Повторюсь ещё раз, скрипты я пишу сам, а не откуда то копирую. Поэтому без моего разрешения и копирайтов копировать запрещаю.

#coding:utf-8
#Author: RusheR
#Site: http://klipner.ru
from PyQt4.QtGui import *
from PyQt4.QtCore  import *
from PyQt4.QtWebKit import *
import signal,sys
class Snapshot():
    def __init__(self):
        #  Создаём обьект для рендеринга и закачки web страниц
        self.webpage = QWebPage()
        # Создаём сигнал со слотом для сохранения скриншота
        # Как только загрузка  будет завершена, будет вызван метод save. 
        self.webpage.connect(self.webpage, SIGNAL("loadFinished(bool)"), self.save)
 
    def save(self,result):
        if not result:
            sys.exit()      
        # Получаем размер загруженной странички
        size = self.webpage.mainFrame().contentsSize()
        # Меняем размер виртуального окна просмотра
        self.webpage.setViewportSize(size)
        # Создаём картинку
        image = QImage(self.webpage.viewportSize(), QImage.Format_ARGB32)
        # Виртуальный девайс для рендеринга веб странички
        painter = QPainter(image)
        # Рендерим в виртуальный девайс
        self.webpage.mainFrame().render(painter)     
        painter.end()
        # Сохраняем
        image.save('output.png')
        # Закрываем приложение
        sys.exit()
    def load(self,url):
        self.webpage.mainFrame().load(QUrl(url))
app = QApplication([])
signal.signal(signal.SIGINT, signal.SIG_DFL) 
s = Snapshot()
s.load('http://klipner.ru')
sys.exit(app.exec_())

10 Ответов на “Делаем скриншоты сайтов”

  1. Tweets that mention Блог RushteR » Делаем скриншоты сайтов -- Topsy.com сказал:

    [...] This post was mentioned on Twitter by Артём, konovalov v. konovalov v said: Делаем скриншоты сайтов [...]

  2. Andrey SAN сказал:

    Попробовал запустить скрипт на впс, там иксов нету, пишет:
    «: cannot connect to X server»
    значит без них думаю скрипт не отработает

  3. rushter сказал:

    xvfb-run -s «-screen 0 640x480x24″ python scrеenr.py
    Не проверял.

  4. Крайст сказал:

    По-моему, это довольно «дорого», за счёт тяжеловесного QtWebKit, нет?

  5. rushter сказал:

    Есть лучше варианты ?

  6. Крайст сказал:

    Ну, как сказать.. уверен, что если бы мне понадобилось – я бы перебрал все возможности, даже самые фантастические и туманные.
    Кстати, а вот и воплощение:

    Не Ваше?

  7. rushter сказал:

    Нет, не моё :)

  8. Крайст сказал:

    Ну, под виндой ещё можно юзать win32api

  9. rushter сказал:

    Не уверен, странички то не всегда во весь экран, скроллить надо.

  10. Andrey SAN сказал:

    Спасибо! команда
    xvfb-run -s «-screen 0 640x480x24″ python scrеenr.py
    очень помогла ;)

Оставить комментарий