Python - как использовать метод mainframe () в QWebEnginePage [ошибка mainframe ()] - PullRequest
0 голосов
/ 09 ноября 2018

Я получаю ошибку в коде PyQt5. Может кто-нибудь мне помочь.

import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView as QWebView

class Browser(QWebView):

    def __init__(self):
        QWebView.__init__(self)
        self.loadFinished.connect(self._result_available)

    def _result_available(self, ok):
        frame = self.page().mainFrame()
        print( unicode(frame.toHtml()).encode('utf-8'))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    view = Browser()
    view.load(QUrl('http://www.google.com'))
    app.exec_()

Вывод: [Ошибка]

  AttributeError                            Traceback (most recent call last) 
  <ipython-input-50-e1b5f3fc9054> in _result_available(self, ok)

   13

   14     def _result_available(self, ok):

  ---> 15              frame = self.page().mainFrame()    ------------- [ERROR]

   16         print( unicode(frame.toHtml()).encode('utf-8'))

   17 

  AttributeError: 'QWebEnginePage' object has no attribute 'mainFrame'

1 Ответ

0 голосов
/ 09 ноября 2018

Кажется, что вы используете руководство по Qt Webkit, которое устарело с Qt 5.6, в настоящее время используется Qt WebEngine, который изменил многие классы и методы, поскольку он основан на хроме, в этом link вы можете найти руководство по портированию Qt Webkit на Qt WebEngine. В вашем случае нет mainFrame(), а способ получить HTML асинхронный:

import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView as QWebView

class Browser(QWebView):
    def __init__(self):
        QWebView.__init__(self)
        self.loadFinished.connect(self._result_available)

    def _result_available(self, ok):
        if ok:
            frame = self.page()
            frame.toHtml(self.callback)

    def callback(self, html):
        print(unicode(html).encode('utf-8'))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    view = Browser()
    view.load(QUrl('http://www.google.com'))
    sys.exit(app.exec_())
...