PyQt5 / PySide2 AdBlock - PullRequest
       31

PyQt5 / PySide2 AdBlock

0 голосов
/ 16 ноября 2018

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

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

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

1 Ответ

0 голосов
/ 16 ноября 2018

Для фильтрации URL-адресов должен быть реализован QWebEngineUrlRequestInterceptor, и если вы хотите заблокировать URL-адрес, вы должны вызвать функцию block (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_())
...