2010-07-17 8 views
4

QWebView가 정상적으로 작동합니다. 그런 다음 spynner의 코드를 사용하여 useragent 메서드를 사용자 지정 메서드에 바인딩하려고합니다. 이것은 spynner (QWebPage 포함)에서 작동하지만 여기서는 작동하지 않는 것으로 보입니다. 어떤 도움을 많이 주셨습니다. 코드 :이 도움이되기를 바랍니다QWebView에서 사용자 에이전트 설정

def customuseragent(url): 
print 'called for %s' % url 
return 'custom ua' 


#inside a class 
self.webkit = QtWebKit.QWebView() 
self.webkit.page().userAgentForUrl = customuseragent 
self.webkit.load(QtCore.QUrl('http://www.whatsmyuseragent.com/')) 
+0

참조 : http://stackoverflow.com/questions/5317924/how-do-i-set-the-user-agent-for-a-qnetworkrequest-in-pyqtwebkit/7878683#7878683 –

답변

2
class MyBrowser(QWebPage): 
    ''' Settings for the browser.''' 

    def userAgentForUrl(self, url): 
     ''' Returns a User Agent that will be seen by the website. ''' 
     return "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15" 

class Browser(QWebView): 
    def __init__(self): 
     QWebView.__init__(self) 
     self.setPage(MyBrowser()) 
6

...

코드

def customuseragent(url): 
    print 'called for %s' % url 
    return 'custom ua' 


#inside a class 
self.webkit = QtWebKit.QWebView() 
self.webkit.page().userAgentForUrl = customuseragent 
self.webkit.load(QtCore.QUrl('http://www.whatsmyuseragent.com/')) 

전제 조건 종속성

from PyQt4.QtWebKit import * # Import all from QtWebKit 

이전 지시문을 사용하면 QtWebKit.QWebKit() 개체와 메서드를 상속 할 수 있습니다. 그러나 사용자 에이전트 ("웹 브라우저")를 지정할 수있는 하나 이상의 구성 요소가 누락되었습니다. 그래서 기술적으로 위의 라인과 동일 나는 QWebView.load 방법에 대한 서명을 썼다 위에

QWebView.load(QNetworkRequest var) # Where var is a variable object of QNetworkRequest 

그냥 그래서 당신은

QtCore.QUrl('http://www.whatsmyuseragent.com/') 

를 호출 할 때 QNetworkRequest을 사용하고 있는지 어떻게 알 수 있습니다 다음

:

위의 행을 포함하기 위해
self.request = QNetworkRequest() 
self.request.setUrl(QUrl(url)) 

가져올 필요 0

from PyQt4.QtNetwork import * # Just import all to be lazy 

또는

from PyQt4.QtNetwork import QNetworkRequest # This is actually the origin of QNetworkRequest 

Connect는 점

좋아,의 함께 지금 모든 당겨 할 수 있습니다. 우리는 QUrl이 QNetworkRequest() 객체이며 QNetworkRequest를 사용하여 URL을 지정할 수 있음을 알고 있습니다. 마지막으로 사용자 에이전트를 설정하는 방법을 알아야합니다.

사용자 에이전트는 setRawHeader (문자열, 문자열) DONE QNetworkRequest

self.request.setRawHeader("User-Agent","You/desired/user/agent") 
self.request.load(self.request) #load the QNetworkRequest object variable to .load() 

하는 방법을 사용하여 설정됩니다!

최종 초안

from PyQt4.QtWebKit import * 
from PyQt4.QtNetwork import * 

USER_AGENT = "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1" 


def customuseragent(url): 
    print 'called for %s' % url 
    return 'custom ua' 


#inside a class 
# class WebRequest(QWebView) ## the definition of the class uncomment to make use of the inheritance. 

## from this tutorial 
self.request = QNetworkRequest() 
self.request.setUrl(QUrl(url)) 
self.request.setRawHeader("User-Agent",USER_AGENT) 

## modified version of the original design 
self.webkit = QtWebKit.QWebView() 
self.webkit.page().userAgentForUrl = customuseragent 
self.webkit.load(self.request) 

나는이 당신을 도와 바랍니다. 나는 당신이 기본을 얻는다 고 생각하기 때문에 몇 가지 사항을 생략했다.

관련 문제