5

我正在慢慢地在 PyQt4 中构建一个网络浏览器,并且喜欢我从中得到的速度。但是,我想将 easylist.txt 与它结合起来。我相信 adblock 使用它来阻止浏览器的 http 请求。

你将如何使用 python/PyQt4 来处理它?

[编辑1] 好的。我想我已经设置了 Privoxy。我没有设置任何额外的过滤器,它似乎工作。我尝试使用的 PyQt4 看起来像这样

self.proxyIP = "127.0.0.1"  
self.proxyPORT= 8118  
proxy = QNetworkProxy()  
proxy.setType(QNetworkProxy.HttpProxy)  
proxy.setHostName(self.proxyIP)  
proxy.setPort(self.proxyPORT)  
QNetworkProxy.setApplicationProxy(proxy)

但是,这绝对没有任何作用,我无法理解文档,也找不到任何示例。

[edit2] 我刚刚注意到如果我将 self.proxyIP 更改为我的实际本地 IP 而不是 127.0.0.1 页面不会加载。所以有些事情正在发生。

4

4 回答 4

6

我知道这是一个老问题,但我想我会尝试为任何偶然发现它的人提供答案。您可以创建 QNetworkAccessManager 的子类并将其与https://github.com/atereshkin/abpy结合使用。有点像这样:

from PyQt4.QtNetwork import QNetworkAccessManager
from abpy import Filter
adblockFilter = Filter(file("easylist.txt"))
class MyNetworkAccessManager(QNetworkAccessManager):
    def createRequest(self, op, request, device=None):
        url = request.url().toString()
        doFilter = adblockFilter.match(url)
        if doFilter:
            return QNetworkAccessManager.createRequest(self, self.GetOperation, QNetworkRequest(QUrl()))
        else:
            QNetworkAccessManager.createRequest(self, op, request, device)
myNetworkAccessManager = MyNetworkAccessManager()

之后,在所有 QWebView 实例上设置以下内容,或者创建 QWebView 的子类:

QWebView.page().setNetworkAccessManager(myNetworkAccessManager)

希望这可以帮助!

于 2013-08-19T21:33:28.273 回答
0

这是关于网络过滤的问题吗?

然后尝试使用一些外部网络代理,例如 Privoxy ( http://en.wikipedia.org/wiki/Privoxy )。

于 2009-07-05T23:14:43.010 回答
0

easylist.txt 文件只是纯文本,如下所示:http: //adblockplus.mozdev.org/easylist/easylist.txt

以 [ 开头的行还有 ! 似乎是注释,所以这只是对文件进行排序的情况,并根据easylist.txt文件中行的起始字符在url/request中搜索正确的内容。

于 2009-07-05T23:25:22.677 回答
0

Privoxy 是固体。如果您希望它完全基于 API,请查看BrightCloud Web 过滤 API

于 2009-09-29T06:24:36.367 回答