2010-07-17 91 views
4

我有一個QWebView,它工作正常。然後,使用spynner的代碼,我嘗試將useragent方法綁定到自定義方法。這似乎工作在spynner(與QWebPage),但不在這裏。任何幫助非常感謝。代碼:在QWebView中設置useragent

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 – 2011-10-24 16:38:49

回答

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()對象及其方法的使用。但是你缺少一個允許你指定用戶代理(「Web瀏覽器」)的組件。請注意,上面我的QWebView.load方法寫了簽名

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

碰巧您使用QNetworkRequest當你調用

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

所以技術上上面的一行是一樣的以下內容:

self.request = QNetworkRequest() 
self.request.setUrl(QUrl(url)) 

爲了包括上述行,你需要輸入:

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

OR

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

連接點

好吧,讓我們把它所有現在在一起。我們知道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) 

我希望這有助於你。我忽略了一些事情,因爲我認爲你得到了基本面。

相關問題