[英]How to download csv file with QWebEngineView and QUrl
我正在構建一個程序,該程序使用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)
有沒有人對如何實現這一目標有任何建議?
在 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_())
如果你想直接下載,你可以使用 QWebEnginePage 的下載方法:
self.view.page().download(QtCore.QUrl("https://domain/your.csv"))
更新:
@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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.