我对PyQt5 WebEngineView和url的html有一个小问题:https://www.remove.bg"

2024-10-01 22:43:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在pyqtwebengineview中启用了下载功能,并且运行良好。但是,我对该网站有一些问题:https://www.remove.bg"

所以我下载了该网站的html内容,问题是锚定标签

<a href="https://o.remove.bg/downloads/df97f73e-975d-4ff6-9558-d0ad4b486f79/back-removebg-preview.png"target="_blank" rel="noopener" ondragstart="return false;" class="btn btn-primary" style="min-width: 190px;">Download</a>

如果我只是简单地删除这个目标属性,它会工作得很好。
这很有效

<a href="https://o.remove.bg/downloads/df97f73e-975d-4ff6-9558-d0ad4b486f79/back-removebg-preview.png"rel="noopener" ondragstart="return false;" class="btn btn-primary" style="min-width: 190px;">Download</a>

区别只是目标属性。该怎么做。如何使此网站正常工作


Tags: httpspng网站downloadsbackpreviewremoverel
1条回答
网友
1楼 · 发布于 2024-10-01 22:43:41

重定向链接有一个属性“_blank”,根据协议,该属性必须打开一个新选项卡,因此在a previous answer中,我解释了实现应该是什么,我将省略该部分,并且仅显示在下载完成时删除新选项卡的代码

import sys
from functools import cached_property

from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets


class WebView(QtWebEngineWidgets.QWebEngineView):
    def createWindow(self, type_):
        if not isinstance(self.window(), Browser):
            return

        if type_ == QtWebEngineWidgets.QWebEnginePage.WebBrowserTab:
            return self.window().tab_widget.create_tab()


class TabWidget(QtWidgets.QTabWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setTabsClosable(True)

    def create_tab(self):
        view = WebView()

        index = self.addTab(view, "(Untitled)")
        self.setTabIcon(index, view.icon())
        view.titleChanged.connect(self.update_title)
        view.iconChanged.connect(self.update_icon)
        self.setCurrentWidget(view)
        return view

    def update_title(self, title):
        view = self.sender()
        index = self.indexOf(view)
        self.setTabText(index, title)

    def update_icon(self, icon):
        view = self.sender()
        index = self.indexOf(view)
        self.setTabIcon(index, icon)


class Browser(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        QtWebEngineWidgets.QWebEngineProfile.defaultProfile().downloadRequested.connect(
            self.on_downloadRequested, QtCore.Qt.UniqueConnection
        )

        self.setCentralWidget(self.tab_widget)

        view = self.tab_widget.create_tab()
        view.load(QtCore.QUrl("https://www.remove.bg"))

    @cached_property
    def tab_widget(self):
        return TabWidget()

    def on_downloadRequested(self, download):
        download.finished.connect(self.download_finished)
        default_path = download.downloadFileName()
        suffix = QtCore.QFileInfo(default_path).suffix()
        path, _ = QtWidgets.QFileDialog.getSaveFileName(
            self, "Save File", default_path, "*." + suffix
        )
        if path:
            download.setPath(path)
            download.accept()

    def download_finished(self):
        self.tab_widget.removeTab(self.tab_widget.currentIndex())


def main():
    app = QtWidgets.QApplication(sys.argv)

    w = Browser()
    w.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

相关问题 更多 >

    热门问题