Python - 如何在 QWebEnginePage 中使用 mainframe() 方法 [mainframe() 错误]

Posted

技术标签:

【中文标题】Python - 如何在 QWebEnginePage 中使用 mainframe() 方法 [mainframe() 错误]【英文标题】:Python - how to use mainframe() method in QWebEnginePage [error of mainframe()] 【发布时间】:2018-11-09 06:45:33 【问题描述】:

我在 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】:

您似乎正在使用从 Qt 5.6 弃用的 Qt Webkit 指南,它目前使用的 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_())

【讨论】:

感谢您的解决方案。我看到了链接,但它是 C++ API。你能告诉我我将如何在 python 或任何 Python 链接中使用它。 @David 如果我的回答对您有所帮助,请不要忘记将其标记为正确,如果您不知道该怎么做,请查看tour,这是最好的感谢方式。另一方面,不幸的是,没有适用于 python 的文档,但是当我在回答中指出我的目的是让您阅读和理解 Qt Webkit 和 Qt Webengine 之间的等效性时,类和方法的名称是相同的C++ 和 python 所以一般来说你应该没有问题尝试翻译,另一方面,互联网上有很多指南和 SO 中的相关问题。

以上是关于Python - 如何在 QWebEnginePage 中使用 mainframe() 方法 [mainframe() 错误]的主要内容,如果未能解决你的问题,请参考以下文章

在电脑上如何装python

如何在Centos上安装python3.4

如何在arch linux中用python 2完全替换python 3

在python中如何创建角色?

如何在windows cmd下运行python

如何在 python 3 解释器中运行带有参数的 python 脚本?