当前位置 博文首页 > 肆大财子的博客:pyqt5显示html,如何用PyQt5的QWebEngineVi“呈

    肆大财子的博客:pyqt5显示html,如何用PyQt5的QWebEngineVi“呈

    作者:[db:作者] 时间:2021-08-08 10:15

    如何使用PyQt5 v5.6qwebengineview“呈现”HTML?

    我以前用PyQt5 v5.4.1qwebpage执行过这个任务,但是尝试新的QWebEngineView是suggested。

    以下是实现(它通常按预期工作,但对于某些站点和情况有无限期挂起的趋势):def render(source_html):

    """Fully render HTML, JavaScript and all."""

    import sys

    from PyQt5.QtWidgets import QApplication

    from PyQt5.QtWebKitWidgets import QWebPage

    class Render(QWebPage):

    def __init__(self, html):

    self.html = None

    self.app = QApplication(sys.argv)

    QWebPage.__init__(self)

    self.loadFinished.connect(self._loadFinished)

    self.mainFrame().setHtml(html)

    self.app.exec_()

    def _loadFinished(self, result):

    self.html = self.mainFrame().toHtml()

    self.app.quit()

    return Render(source_html).html

    import requests

    sample_html = requests.get(dummy_url).text

    print(render(sample_html))

    下面是我使用QWebEngineView的尝试。首先,在Ubuntu上安装和设置PyQt5 v5.6:# install PyQt5 v5.6 wheel from PyPI

    pip3 install --user pyqt5

    # link missing resources

    ln -s ../resources/icudtl.dat ../resources/qtwebengine_resources.pak ../resources/qtwebengine_resources_100p.pak ../resources/qtwebengine_resources_200p.pak ../translations/qtwebengine_locales ~/.local/lib/python3.5/site-packages/PyQt5/Qt/libexec/

    现在对Python来说。。。以下结果导致分段错误:def render(source_html):

    """Fully render HTML, JavaScript and all."""

    import sys

    from PyQt5.QtWidgets import QApplication

    from PyQt5.QtWebEngineWidgets import QWebEngineView

    class Render(QWebEngineView):

    def __init__(self, html):

    self.html = None

    self.app = QApplication(sys.argv)

    QWebEngineView.__init__(self)

    self.loadFinished.connect(self._loadFinished)

    self.setHtml(html)

    self.app.exec_()

    def _loadFinished(self, result):

    # what's going on here? how can I get the HTML from toHtml?

    self.page().toHtml(self.callable)

    self.app.quit()

    def callable(self, data):

    self.html = data

    return Render(source_html).html

    import requests

    sample_html = requests.get(dummy_url).text

    print(render(sample_html))

    问题似乎在于对异步toHtml()的调用。看起来应该很简单,但我不知道该怎么办。在C++上下文中,我看到它是{{a3},但我不知道如何将其翻译为Python。我怎样才能把HTML弄出来?

    cs