2009-07-04 2 views
4

나는 천천히 PyQt4에 web browser을 구축하고 있으며 속도가 빠져 나가고있다. 그러나 easylist.txt와 결합하고 싶습니다. 나는 adblock이 브라우저에서 HTTP 요청을 차단하기 위해 이것을 사용한다고 생각한다.어떻게 파이썬을 사용하여 adblock 하시겠습니까?

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)

것 같습니다.

[edit2] 나는 self.proxyIP를 127.0.0.1이 아닌 실제 로컬 IP로 변경한다고 생각했습니다. 페이지가로드되지 않습니다. 그래서 뭔가가 일어나고 있습니다.

+2

당신은 파이썬으로부터 어떤 HTTP 요청이 끝났는지를 제어 할 수 있습니까? 그렇지 않다면, 그것은 까다로울 것입니다. 그렇다면 사소한 것입니다. Sooo .... 이상한 질문입니다. –

+0

저는 방금 http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qhttp.html을 보았습니다. 가능하다고 생각합니다. 방법을 알아내는 것의 문제 일 수도 있습니다. – regomodo

+0

무엇을 묻고 있습니까? 광고를 식별하는 방법? 그렇다면 AdBlock Plus에서 EasyList 구독 사본을 가져 와서 사용합니다. – Eli

답변

0

웹 필터링에 대한 질문입니까?

그런 다음 샘플 Privoxy (http://en.wikipedia.org/wiki/Privoxy)에 대해 일부 외부 웹 프록시를 사용해보십시오. 또한 [로 시작 http://adblockplus.mozdev.org/easylist/easylist.txt

라인과 : 여기에 입증 된 바와 같이

+0

예, 웹 필터링. Privoxy가 내가 필요한 것을한다면 그것은 노력을 줄일 것입니다. 요청을 차단하는 것이 아니라 차단하는 것이 더 효율적입니까? – regomodo

+0

네, 맞습니다. 당신이 그것을 막는다면 당신은 여전히 ​​자원 (이미지, 스크립트, 뭐든)을로드한다. 요청은 여전히 ​​이루어집니다. 요청을 방지하면로드가 발생하지 않습니다. –

+0

방지 ... 블록 .. 여기의 차이점은 무엇입니까? G00gle 광고 (샘플)를 차단하기 위해 HTML 코드를 다시 작성하기는 어려울 수 있지만 URL로 요청을 쉽게 포착하고 차단할 수 있습니다. –

0

easylist.txt 파일은 단순히 일반 텍스트입니다! 주석으로 보이므로 단순히 파일을 정렬하여 easylist.txt 파일의 행 시작 문자에 따라 url/요청에서 올바른 내용을 검색하는 것입니다.

+0

나는 이미 목록에 무엇이 있는지 알았다. 난 그냥 요청을 차단하거나 일어나는 것을 막을 수 있는지 확인하려고합니다. – regomodo

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) 

희망을!