cod*_*ker 4 python pyqt pyqt5 qtwebengine qwebengineview
我正在构建一个程序,该程序使用QWebEngineView并QUrl在我的 PyQt5 应用程序(在 Windows 10 上运行)中显示一个网站。但是,我现在希望能够从同一网站下载 CSV 文件,但作为菜鸟,我似乎无法弄清楚如何。
我很熟悉使用requests, urllib.request,urllib3等来下载文件,但为此,我特别想用 QWebEngineView 来做,因为用户之前已经在 pyqt5 窗口中对请求进行了身份验证。首先显示网站的代码如下:
self.view = QWebEngineView(self)
self.view.load(QUrl(url))
self.view.loadFinished.connect(self._on_load_finished)
self.hbox.addWidget(self.view)
Run Code Online (Sandbox Code Playgroud)
有没有人对如何实现这一目标有任何建议?
在 QWebEngineView 中,默认情况下不处理下载,要启用它,您必须使用 QWebEngineProfile 的 downloadRequested 信号,这会传输一个 QWebEngineDownloadItem,如果您希望下载开始,则必须接受该信号:
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.view = QtWebEngineWidgets.QWebEngineView()
self.view.page().profile().downloadRequested.connect(
self.on_downloadRequested
)
url = "https://domain/your.csv"
self.view.load(QtCore.QUrl(url))
hbox = QtWidgets.QHBoxLayout(self)
hbox.addWidget(self.view)
@QtCore.pyqtSlot("QWebEngineDownloadItem*")
def on_downloadRequested(self, download):
old_path = download.url().path() # download.path()
suffix = QtCore.QFileInfo(old_path).suffix()
path, _ = QtWidgets.QFileDialog.getSaveFileName(
self, "Save File", old_path, "*." + suffix
)
if path:
download.setPath(path)
download.accept()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
如果你想直接下载,你可以使用 QWebEnginePage 的下载方法:
self.view.page().download(QtCore.QUrl("https://domain/your.csv"))
Run Code Online (Sandbox Code Playgroud)
更新:
@QtCore.pyqtSlot("QWebEngineDownloadItem*")
def on_downloadRequested(self, download):
old_path = download.url().path() # download.path()
suffix = QtCore.QFileInfo(old_path).suffix()
path, _ = QtWidgets.QFileDialog.getSaveFileName(
self, "Save File", old_path, "*." + suffix
)
if path:
download.setPath(path)
download.accept()
download.finished.connect(self.foo)
def foo(self):
print("finished")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |