python - 错误 :permission_manager_qt. cpp(82) 不支持的权限类型:13

标签 python pyqt pyqt5 qtwebengine

我正在编写具有内置浏览器功能的 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/

相关文章:

python - 从不同结构和工资符号的 HTML 工作规范中提取工资

python - 放大和缩小小部件

python - 重新加载时`QPixmap`和`QLabel`大小略有增加

python - 使用 py2app 捆绑 PyQt5 应用程序 : keep getting "Abort trap: 6" error

python - 如何以正确的顺序转置和聚合此数据框?

python - 如何为 Python Heroku 项目安装内部需求?

python - PyQt5 相当于 WPF StackPanel

python - 用于橡皮筋的鼠标左键和用于平移 PYQT 的中间键

html - 如何使用pyqt5将网页html转换为pdf

Python **kwargs : unexpected keyword argument