【问题标题】:PyQt5/PySide2 AdBlockPyQt5/PySide2 广告拦截
【发布时间】:2018-11-16 01:10:00
【问题描述】:

我正在尝试为 youtube 和其他媒体创建一个浮动浏览器。
我发现了一些像 PyQt4/PySide 这样的 adblock 旧示例,但现在它们已被弃用,我无法将它们转换为 PySide2 QWebEngineView。

关于如何在 QWebEngineView 中插入广告块有什么想法吗?

旧版链接How would you adblock using Python?

【问题讨论】:

  • 感谢@eyllanesc 的回复,添加了旧版本的链接。我正在阅读文档,但到目前为止还没有,似乎方法被扯掉了。我相信他们更改了名称、模块以及如何实现:(

标签: python python-3.x pyqt5 pyside2 qwebengineview


【解决方案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_())

【讨论】:

  • 工作就像一个魅力!谢谢 :D 寻找 PyQT5/PySide2 文档或参考网站的任何提示?
  • 我仍然可以看到 youtube 广告 :(
  • 不幸的是,这导致我的浏览器变慢,可能是因为文件大小。有没有办法加快速度,也许使用更小的文件?
猜你喜欢
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 2015-02-16
相关资源
最近更新 更多