Блокировка рекламы PyQt5/PySide2

Я пытаюсь создать плавающий браузер для YouTube и других медиа.
Я нашел несколько старых примеров блокировки рекламы, например, для PyQt4/PySide, но теперь они устарели, и я не могу перевести их в PySide2 QWebEngineView.

Любые идеи о том, как вставить рекламный блок в QWebEngineView?

Ссылка на старую версию Как бы вы блокировали рекламу с помощью Python?


person Maxwell Dalboni    schedule 16.11.2018    source источник
comment
Спасибо за ответ @eyllanesc, добавил ссылку на старую версию. Я читаю документы, но пока ничего, кажется, методы были сорваны. Я считаю, что они изменили имена, модули и способ реализации :(   -  person Maxwell Dalboni    schedule 16.11.2018


Ответы (1)


Для фильтрации URL-адресов должен быть реализован QWebEngineUrlRequestInterceptor, и если вы хотите заблокировать URL-адрес, вы должны вызвать функцию блокировки (True) для QWebEngineUrlRequestInfo. Для фильтрации я буду использовать библиотеку adblockparser и easylist.txt.

from PyQt5 import QtCore, QtWidgets, QtWebEngineCore, QtWebEngineWidgets
from adblockparser import AdblockRules

with open("easylist.txt") as f:
    raw_rules = f.readlines()
    rules = AdblockRules(raw_rules)

class WebEngineUrlRequestInterceptor(QtWebEngineCore.QWebEngineUrlRequestInterceptor):
    def interceptRequest(self, info):
        url = info.requestUrl().toString()
        if rules.should_block(url):
            print("block::::::::::::::::::::::", url)
            info.block(True)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    interceptor = WebEngineUrlRequestInterceptor()
    QtWebEngineWidgets.QWebEngineProfile.defaultProfile().setRequestInterceptor(interceptor)
    view = QtWebEngineWidgets.QWebEngineView()
    view.load(QtCore.QUrl("https://www.youtube.com/"))
    view.show()
    sys.exit(app.exec_())
person eyllanesc    schedule 16.11.2018
comment
Работал как шарм! Спасибо, чувак: D Есть какие-нибудь советы по поиску документации или справочных сайтов PyQT5/PySide2? - person Maxwell Dalboni; 17.11.2018