PyQt6自定义浏览器下载功能实现遇两类错误求助
问题解决方案
1. CORS错误说明
这个错误是网页端JavaScript的跨域问题,和你的浏览器下载代码无关。download.cnet.com页面中的XMLHttpRequest请求尝试访问https://684d0d47.akstat.io/,但目标服务器没有设置Access-Control-Allow-Origin响应头,导致浏览器同源策略拦截了请求。这属于网站自身的前端问题,无需修改你的浏览器代码。
2. AttributeError错误修复
PyQt6中QWebEngineDownloadRequest的状态枚举被重构到嵌套类State中,你代码里直接访问QWebEngineDownloadRequest.DownloadRequested的写法错误,需要改为QWebEngineDownloadRequest.State.DownloadRequested。
另外还有一个潜在问题:PyQt6的QFileDialog.getSaveFileName返回的是Python原生字符串,而非QString,因此不能调用isEmpty()方法,应该用Python原生的空字符串判断方式if not path:。
修改后的下载管理类代码
class DownloadManagerWidget(QWidget): def downloadRequested(self, download: QWebEngineDownloadRequest): assert download and download.state() == QWebEngineDownloadRequest.State.DownloadRequested # Prompt the user for a file name path, _ = QFileDialog.getSaveFileName(self, "Save as", QDir(download.downloadDirectory()).filePath(download.downloadFileName())) if not path: return # Set download directory and file name download.setDownloadDirectory(QFileInfo(path).path()) download.setDownloadFileName(QFileInfo(path).fileName()) download.accept() # Add the download to the download manager self.add(DownloadWidget(download)) # Show the download manager self.show()
额外说明
- 第一个CORS错误不会影响下载功能,只是网页自身的JS报错,可忽略控制台该输出。
- 修复枚举和字符串判断的问题后,下载请求处理逻辑即可正常运行,不会再触发AttributeError异常。
内容的提问来源于stack exchange,提问作者Faizal Zahid
相关产品推荐
相关产品推荐

