PyQt4 QWebPage установить Qtimer для дополнительного времени рендеринга Javascript - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь добавить дополнительное время для рендеринга Javascript, я знаю, что мне нужно использовать Qtimer для него, но я не знаю, как мне нужно правильно писать код.

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

class Client(QWebPage):
     def __init__(self, url):
         self.app = QApplication(sys.argv)
         QWebPage.__init__(self)
         self.loadFinished.connect(self.finished_loading)
         self.userAgentForUrl(url)
         self.timer = QTimer()
         self.timer.singleShot(15000, self.finished_loading)
         self.mainFrame().load(QUrl(url))
         self.app.exec_()

     def userAgentForUrl(self, url):
         return 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'

     def finished_loading(self,url):
         self.app.quit()

url=#URL
client_response = Client(url)
source = client_response.mainFrame().toHtml()
print(source.encode('utf-8'))

1 Ответ

0 голосов
/ 05 июля 2018

Если вы хотите дать ему дополнительное время после загрузки страницы, тогда вы должны использовать QTimer в слоте finished_loading, нет необходимости создавать экземпляр QTimer, этого достаточно для статического метод singleShot():

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

class Client(QWebPage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.loadFinished.connect(self.finished_loading)
        self.userAgentForUrl(url)
        self.mainFrame().load(QUrl(url))
        self.app.exec_()

    def userAgentForUrl(self, url):
        return 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'

    def finished_loading(self,url):
        QTimer.singleShot(15*1000, self.app.quit)

url=#URL
client_response = Client(url)
source = client_response.mainFrame().toHtml()
print(source.encode('utf-8'))
...