如何解决Pyqt5在加载html时创建Web浏览器崩溃

Posted

技术标签:

【中文标题】如何解决Pyqt5在加载html时创建Web浏览器崩溃【英文标题】:how to solve Pyqt5 create web browser when load html crash 【发布时间】:2019-12-21 18:20:56 【问题描述】:

我通过 PyQt5 创建了一个网络浏览器,如果我加载 url="http://www.google.com" 没有任何问题,但如果我加载 url="http://192.168.0.106/get.html" ,运行代码,小部件崩溃.

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
import sys  

class MainWindow(QMainWindow):
    """docstring for MainWindow"""
    def __init__(self, *arg,**kwargs):
        super(MainWindow, self).__init__(*arg,**kwargs)
        self.setWindowTitle("Load huobi exchange bar")

        self.browser = QWebEngineView()
        self.browser.setUrl(QUrl("http://192.168.0.106/get.html"))

        self.setCentralWidget(self.browser)


app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()

下面是get.html的内容

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>huobi exchange bar</title>
</head>
<body>
  <!-- TradingView Widget BEGIN -->
  <div class="tradingview-widget-container">
    <div class="tradingview-widget-container__widget"></div>
    <div class="tradingview-widget-copyright"><a href="https://cn.tradingview.com/crypto-screener/" rel="noopener" target="_blank"><span class="blue-text">sample</span></a>TradingView</div>
    <script type="text/javascript" src="https://s3.tradingview.com/external-embedding/embed-widget-screener.js" async>
    
    "width": 1100,
    "height": 512,
    "defaultColumn": "overview",
    "defaultScreen": "general",
    "market": "crypto",
    "showToolbar": true,
    "colorTheme": "dark",
    "locale": "zh_CN"
  
    </script>
  </div>
  <!-- TradingView Widget END -->
</body>
</html>

我的问题是:如何解决加载异步 js 时窗口崩溃的问题?

【问题讨论】:

你有加载 HTML 的服务器吗? 是的,我愿意。我在本地主机中有一台服务器。我可以直接在chrome中打开get.html。 那么你必须说明你是如何运行你的主机的,你必须提供更多信息...... 正如我在回答中指出的那样:建议您在 CMD/控制台中运行代码,因为您将能够获得有关错误的更多信息。 我的意思是如果html的内容不包含这样的javascript:"src="s3.tradingview.com/external-embedding/embed-widget-screener.js"async",小部件显示正常。 【参考方案1】:

我不明白为什么应用程序会损坏,因为即使 url 不存在,它也会向您显示错误页面,因此如果您想了解错误的更多详细信息,您应该在控制台/CMD 中运行代码。

另一方面,您并没有表示任何服务器执行 HTML,另外也不需要使用“http://192.168.0.106”主机,只需将其加载为本地文件即可:

├── get.html
└── main.py
import os
import sys

from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWebEngineWidgets import QWebEngineView


class MainWindow(QMainWindow):
    """docstring for MainWindow"""

    def __init__(self, *arg, **kwargs):
        super(MainWindow, self).__init__(*arg, **kwargs)
        self.setWindowTitle("Load huobi exchange bar")

        self.browser = QWebEngineView()

        current_dir = os.path.dirname(os.path.realpath(__file__))
        filename = os.path.join(current_dir, "get.html")
        url = QUrl.fromLocalFile(filename)
        self.browser.setUrl(url)

        self.setCentralWidget(self.browser)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

【讨论】:

感谢您的帮助。我把你的代码复制到我的电脑上,执行它,但小部件只显示大约 8 秒,然后自动关闭。 @Baren 你在哪里运行它?在控制台/CMD 或某些 IDE 中?你的操作系统是什么? @Baren 请在一个线程中回答我,您使用什么版本的 PyQt5?除了前面的问题。 我在 IDE(sublime) 和 CMD 中运行它,我的操作系统是 win10 @Baren 在 CMD 的情况下是否收到错误消息?你用的是什么版本的python和pyqt5?

以上是关于如何解决Pyqt5在加载html时创建Web浏览器崩溃的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 QWebEngineView 不显示任何内容

如何使用 HTML 按钮关闭应用程序

用 Python PyQT5 掷骰子

在IIS服务器上部署web项目,加载网站css时,报403拒绝访问错误,怎么办,网上的解决办法都不管用

如何在 pyqt5 webbrowser 中为 youtube 视频创建全屏模式

如何从运行时创建的 Web 浏览器的客户端区域创建位图?