Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 25, 2017 15:41:36

k0mm
Зарегистрирован: 2017-02-25
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Снятие скриншота сайта.

Добрый день!

Необходимо сделать скриншот страницы.
Использую скрипт:

 import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
class MakeScreenshot(QWebView):
    def __init__(self):
        self.app = QApplication(sys.argv)
        QWebView.__init__(self)
        self._loaded = False
        self.loadFinished.connect(self._loadFinished)
    def wait_load(self, delay=0):
        while not self._loaded:
            self.app.processEvents()
            time.sleep(delay)
        self.loaded = False
    def _loadFinished(self, result):
        self._loaded = True
    def get_image(self, url):
        self.load(QUrl(url))
        self.wait_load()
        frame = self.page().mainFrame()
        self.page().setViewportSize(frame.contentsSize())
        image = QImage(self.page().viewportSize(),
                       QImage.Format_ARGB32)
        painter = QPainter(image)
        frame.render(painter)
        painter.end()
        return image
s = MakeScreenshot()
image = s.get_image('http://yandex.ru')
image.save('website-screen7.png')

Столкнулся с двумя проблемами:
1) Сайт с которого надо снять скриншот, видит меня как мобильного клиента. Как принудительно задать версию клиента, так и не понял.
2) Скрипт возвращает следующее:
QFont::setPixelSize: Pixel size <= 0 (0)
QFont::setPixelSize: Pixel size <= 0 (0)
Имеет ли смысл эти параметры задать руками ? Если имеет то как их задать ?

Офлайн

#2 Фев. 25, 2017 20:37:58

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

Снятие скриншота сайта.

Тебе нужно изменить http заголовок User-Agent в запросах, к примеру хромовским заголовком ‘Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36’ :)



Офлайн

#3 Фев. 26, 2017 00:55:25

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Снятие скриншота сайта.

User-Agent менять не надо. Нужно задать геометрию виджета:

 class MakeScreenshot(QWebView):
    def __init__(self):
        QWebView.__init__(self)
        self.loadFinished.connect(self._loadFinished)
    def _loadFinished(self, result):
        frame = self.page().mainFrame()
        self.page().setViewportSize(frame.contentsSize())
        image = QImage(self.page().viewportSize(), QImage.Format_ARGB32)
        painter = QPainter(image)
        frame.render(painter)
        painter.end()
        image.save('website-screen7.png')
        self.close()
        
app = QApplication(sys.argv)
s = MakeScreenshot()
s.setGeometry(0,0,1024,780)
s.load(QUrl('https://www.linux.org.ru/'))
sys.exit(app.exec_())



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Фев. 26, 2017 01:02:58)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version