在加载网页期间打印出所有请求的网址

时间:2016-06-28 09:05:37

标签: python qt qt5 pyqt5 qtwebengine

在我的项目中,有些人需要在加载网页时通过Python在Chrome开发工具中获取某个请求的网址, enter image description here

我认为通过Qt WebEngine获取URL是一个很好的解决方案。我开始尝试使用下面的代码在加载网页时打印出所有请求的网址,但它没有工作 - 根本没有网页打印,所以这里有什么问题?有什么好的解决方案吗?

import sys
import os

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtWebEngineCore import *
from PyQt5.QtCore import QUrl


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

    def interceptRequest(self, info):
        print(info.requestUrl())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    profile = QWebEngineProfile()
    profile.setRequestInterceptor(WebEngineUrlRequestInterceptor())
    page = QWebEnginePage(profile)
    page.setUrl(QUrl(
        "http://music.163.com/"))

    view = QWebEngineView()

    view.setPage(page)
    view.resize(1024, 600)

    view.show()

    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

我在Q ++中使用Qt,但在Python中应该是类似的,

如果您正在尝试处理HTTP / HTTPS网址,则可以继承QWebEnginePage并重新实现

const QString EXAMPLE_SCHEMA_HANDLER = "example://" /* http://, https://, mail:// ....   */;
const QWebEngineUrlSchemeHandler* installed =  QWebEngineProfile::defaultProfile()->urlSchemeHandler(EXAMPLE_SCHEMA_HANDLER);
        if (!installed)
            profile()->installUrlSchemeHandler(EXAMPLE_SCHEMA_HANDLER, new WebAppUrlSchemeHandler(this));

要使用您自己的QWebEngineUrlRequestInterceptor,您必须指定您正在使用的协议。 C ++中的示例:

profile.setRequestInterceptor("https://", WebEngineUrlRequestInterceptor())

Dorry我不使用Python,但让我们在Python中尝试这样的东西:

RewriteRule ^sports/cricket/ipl?$ /ipl [NC]
RewriteRule ^sports/cricket?$ /cricket [NC]
RewriteRule ^sports/football/ileague?$ /football [NC]
RewriteRule ^sports/football?$ /football [NC]

看这篇文章: pyqt5.6 interceptRequest doesn't work