我正在编写具有内置浏览器功能的 python 代码 (PyQt 5.13)。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile, QWebEnginePage
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.webview = QWebEngineView()
webpage = QWebEnginePage(self.webview)
self.useragent = QWebEngineProfile(self.webview)
agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246"
self.useragent.defaultProfile().setHttpUserAgent(agent)
self.webview.setPage(webpage)
self.webview.setUrl(QUrl("http://whoer.net/"))
self.setCentralWidget(self.webview)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
一切正常,但有些内容没有加载,同时 cmd 报错
[10900:16264:0831/013730.858:ERROR:permission_manager_qt.cpp(82)] NOT IMPLEMENTEDUnsupported permission type: 13
[10900:16264:0831/013730.859:ERROR:permission_manager_qt.cpp(82)] NOT IMPLEMENTEDUnsupported permission type: 13
[10900:16264:0831/013733.144:ERROR:permission_manager_qt.cpp(82)] NOT IMPLEMENTEDUnsupported permission type: 13
[10900:16264:0831/013733.144:ERROR:permission_manager_qt.cpp(82)] NOT IMPLEMENTEDUnsupported permission type: 13
[10900:16264:0831/013737.063:ERROR:permission_manager_qt.cpp(82)] NOT IMPLEMENTEDUnsupported permission type: 13
[10900:16264:0831/013737.064:ERROR:permission_manager_qt.cpp(82)] NOT IMPLEMENTEDUnsupported permission type: 13
[10900:16264:0831/013753.618:ERROR:permission_manager_qt.cpp(82)] NOT IMPLEMENTEDUnsupported permission type: 13
[10900:16264:0831/013951.389:ERROR:permission_manager_qt.cpp(82)] NOT IMPLEMENTEDUnsupported permission type: 13
有什么问题吗?我尝试以管理员身份运行 cmd,但错误仍然存在。我如何为代码或该文件 (permission_manager_qt.cpp) 分配权限才能正常工作。
最佳答案
TL; DR; 无法处理这些权限,因为 QtWebEngine 已禁用这种可能性。
问题与程序执行权限无关。
Qt WebEngine 是基于 Chromium 编写的,因此 Qt 开发人员目前并未实现所有功能,但会逐渐添加更多功能。在这种情况下,chromium 可用的权限是:
enum class PermissionType {
MIDI_SYSEX = 1,
// PUSH_MESSAGING = 2,
NOTIFICATIONS = 3,
GEOLOCATION = 4,
PROTECTED_MEDIA_IDENTIFIER = 5,
MIDI = 6,
DURABLE_STORAGE = 7,
AUDIO_CAPTURE = 8,
VIDEO_CAPTURE = 9,
BACKGROUND_SYNC = 10,
FLASH = 11,
SENSORS = 12,
ACCESSIBILITY_EVENTS = 13,
CLIPBOARD_READ = 14,
CLIPBOARD_WRITE = 15,
PAYMENT_HANDLER = 16,
BACKGROUND_FETCH = 17,
IDLE_DETECTION = 18,
PERIODIC_BACKGROUND_SYNC = 19,
WAKE_LOCK_SCREEN = 20,
WAKE_LOCK_SYSTEM = 21,
// Always keep this at the end.
NUM,
};
但在 Qt WebEngine 的情况下不处理所有情况:
ProfileAdapter::PermissionType toQt(content::PermissionType type)
{
switch (type) {
case content::PermissionType::GEOLOCATION:
return ProfileAdapter::GeolocationPermission;
case content::PermissionType::AUDIO_CAPTURE:
return ProfileAdapter::AudioCapturePermission;
case content::PermissionType::VIDEO_CAPTURE:
return ProfileAdapter::VideoCapturePermission;
case content::PermissionType::FLASH:
case content::PermissionType::NOTIFICATIONS:
case content::PermissionType::MIDI_SYSEX:
case content::PermissionType::PROTECTED_MEDIA_IDENTIFIER:
case content::PermissionType::MIDI:
case content::PermissionType::DURABLE_STORAGE:
case content::PermissionType::BACKGROUND_SYNC:
case content::PermissionType::SENSORS:
case content::PermissionType::ACCESSIBILITY_EVENTS:
break;
case content::PermissionType::CLIPBOARD_READ:
return ProfileAdapter::ClipboardRead;
case content::PermissionType::CLIPBOARD_WRITE:
return ProfileAdapter::ClipboardWrite;
case content::PermissionType::PAYMENT_HANDLER:
case content::PermissionType::NUM:
break;
}
return ProfileAdapter::UnsupportedPermission;
}
例如,在您的情况下,警告消息:
... NOT IMPLEMENTEDUnsupported permission type: 13
因此需要 PermissionType::ACCESSIBILITY_EVENTS
权限,但根据 QtWebEngine 逻辑返回一个 ProfileAdapter::UnsupportedPermission
,这是警告消息所指示的内容。
结论:
- 没有办法从你这边解决,因为它是一个 Qt/chromium 警告,而且它不是错误,它只是表明你没有那个权限。
关于python - 错误 :permission_manager_qt. cpp(82) 不支持的权限类型:13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57733039/