Nano Hash - криптовалюты, майнинг, программирование

Python – как использовать метод mainframe() в QWebEnginePage [ошибка mainframe()]

Я получаю сообщение об ошибке в коде 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 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_())
09.11.2018
  • Ну спасибо за решение. И я видел ссылку, но это C++ API. Можете ли вы сказать мне, как я буду использовать его в Python или любую ссылку для Python. 09.11.2018
  • @David Если мой ответ поможет вам, не забудьте отметить его как правильный, если вы не знаете, как это сделать, просмотрите тур, это лучший способ поблагодарить. С другой стороны, к сожалению, нет документации, адаптированной для python, но когда я указал в своем ответе, мое намерение состояло в том, чтобы вы прочитали и поняли эквивалентность между Qt Webkit и Qt Webengine, имена классов и методов одинаковы в C ++ и python, поэтому в целом у вас не должно возникнуть проблем с переводом, с другой стороны, в Интернете есть много руководств и связанных вопросов по SO. 09.11.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..