Проблема вызвана тем, что конструктор использует MyWebEnginePage
, поскольку вы разместили его с помощью конструктора:
QWebEnginePage :: QWebEnginePage (QObject * parent = Q_NULLPTR)
Создает пустой QWebEnginePage с родительским родителем.
Вместо второго конструктора:
QWebEnginePage :: QWebEnginePage (QWebEngineProfile* profile, QObject * parent = Q_NULLPTR)
Создает пустую страницу веб-движка в профиле профиля веб-движка с родительским родителем.
Если профиль не является профилем по умолчанию,вызывающая сторона должна обеспечить, чтобы профиль оставался активным до тех пор, пока страница работает.
Эта функция была введена в Qt 5.5.
Решение состоит в том, чтобы передать 2 параметра: профильи родитель, также, если вы не собираетесь добавлять что-либо в конструктор, нет необходимости перезаписывать это, как показано ниже:
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("/12152830/qwebengineurlrequestinterceptor-ne-rabotaet"))
browser.setPage(page)
browser.show()
sys.exit(app.exec_())