QWebEngineUrlRequestInterceptor不工作

2024-04-26 09:38:14 发布

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

我正在将应用程序从PyQt4迁移到PyQt5。在

我试图覆盖请求拦截器,但由于某些奇怪的原因,这是不起作用的,这是没有得到拿起。我使用的是PyQt==5.10.0

class WebEngineUrlRequestInterceptor(QWebEngineUrlRequestInterceptor):
    def __init__(self, parent=None):
        super().__init__(parent)

    def interceptRequest(self, info):
        # info.setHttpHeader("X-Frame-Options", "ALLOWALL")
        print("test")
        print(info.requestUrl()) 
class MyWebEnginePage(QWebEnginePage):

    # adblocker = Filter(open('easylist.txt', encoding="utf8"))

    def __init__(self, parent=None):
        super().__init__(parent)

    def acceptNavigationRequest(self, url, _type, isMainFrame):
        # urlString = url.toString()
        # resp = False
        # resp = WebPage.adblocker.match(url.toString())
        #
        # if resp:
        #     print("Blocking url --- "+url.toString())
        #     return False
        # else:
        #     print("TYPE", _type)
        #     return True

         print(url)

         return QWebEnginePage.acceptNavigationRequest(self, url, _type, isMainFrame)

我就是这样加载浏览器的

^{pr2}$

Tags: selfinfononeurlreturninitdeftype
1条回答
网友
1楼 · 发布于 2024-04-26 09:38:14

问题是由使用MyWebEnginePage的构造函数引起的,正如您使用构造函数放置它一样:

QWebEnginePage::QWebEnginePage(QObject *parent = Q_NULLPTR)

Constructs an empty QWebEnginePage with the parent parent.

而不是第二个构造函数:

QWebEnginePage::QWebEnginePage(QWebEngineProfile *profile, QObject *parent = Q_NULLPTR)

Constructs an empty web engine page in the web engine profile profile with the parent parent.

If the profile is not the default profile, the caller must ensure that the profile stays alive for as long as the page does.

This function was introduced in Qt 5.5.

解决方案是传递两个参数:概要文件和父对象,如果不打算在构造函数中添加任何内容,则无需按如下所示覆盖它:

import sys

from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineCore import QWebEngineUrlRequestInterceptor
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage, QWebEngineProfile


class WebEngineUrlRequestInterceptor(QWebEngineUrlRequestInterceptor):
    def interceptRequest(self, info):
        # info.setHttpHeader("X-Frame-Options", "ALLOWALL")
        print("interceptRequest")
        print(info.requestUrl()) 

class MyWebEnginePage(QWebEnginePage):
    def acceptNavigationRequest(self, url, _type, isMainFrame):
        print("acceptNavigationRequest")
        print(url)
        return QWebEnginePage.acceptNavigationRequest(self, url, _type, isMainFrame)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    browser = QWebEngineView()
    interceptor = WebEngineUrlRequestInterceptor()
    profile = QWebEngineProfile()
    profile.setRequestInterceptor(interceptor)
    page = MyWebEnginePage(profile, browser)
    page.setUrl(QUrl("https://stackoverflow.com/questions/50786186/qwebengineurlrequestinterceptor-not-working"))
    browser.setPage(page)
    browser.show()
    sys.exit(app.exec_())

相关问题 更多 >