2009-07-04 73 views
4

我正在PyQt4中缓慢地构建一个web browser,并且像我摆脱它的速度一样。不过,我想将easylist.txt与它结合使用。我相信adblock使用它来阻止浏览器的http请求。你会如何使用Python来阻止?

你将如何去使用python/PyQt4?

[编辑] 好的。我想我已经设置了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)

然而,这个绝对没有,我不能让文档的意义,并不能找到任何的例子。

我刚刚注意到,我将self.proxyIP更改为我的实际本地IP而不是127.0.0.1,页面无法加载。所以发生了一些事情。

+2

您是否通过Python控制了HTTP请求的完成?如果没有,这将是棘手的。如果是的话,那么这是微不足道的。 Sooo ....我觉得很奇怪的问题。 – 2009-07-05 09:35:25

+0

我刚刚看过http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qhttp.html,我认为这可能是可能的。可能只是想知道如何。 – regomodo 2009-07-06 19:17:20

+0

你在问什么?如何识别广告?如果是这样,我会从AdBlock Plus中获取一份EasyList订阅并使用它。 – Eli 2009-07-06 20:23:31

回答

0

的easylist.txt文件就是纯文本,这表现在这里:http://adblockplus.mozdev.org/easylist/easylist.txt

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

4

我知道这是一个古老的问题,但我想我会尝试给任何偶然发现的人提供答案。您可以创建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) 

希望这有助于!