2010-07-17 22 views
4

J'ai un QWebView qui fonctionne correctement. Ensuite, en utilisant le code de Spynner, j'essaie de lier la méthode useragent à une méthode personnalisée. Cela semble fonctionner dans Spynner (avec un QWebPage), mais pas ici. Toute aide très appréciée. Code:Définition de l'agent utilisateur dans 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

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

Répondre

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

J'espère que cette aide ...

Votre Code

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/')) 

Condition préalable Dépendances

from PyQt4.QtWebKit import * # Import all from QtWebKit 

La directive précédente permet d'hériter de l'utilisation de l'objet QtWebKit.QWebKit() et de ses méthodes. Mais il vous manque un composant supplémentaire qui vous permet de spécifier l'agent utilisateur ("navigateur Web"). Notez que ci-dessus, j'ai écrit la signature de la méthode QWebView.load

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

Il se trouve que vous utilisez QNetworkRequest lorsque vous appelez

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

Ainsi, techniquement la ligne ci-dessus est le même que les éléments suivants:

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

afin d'inclure les lignes ci-dessus, vous devez importer:

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

OU

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

Relie les points

Ok, nous allons tirer tous ensemble maintenant. Nous comprenons que QUrl est un objet QNetworkRequest() et nous pouvons spécifier l'URL en utilisant QNetworkRequest. La dernière chose que nous devons savoir est de savoir comment définir l'agent utilisateur.

User Agent est défini à l'aide de la setRawHeader (string, string) une méthode de QNetworkRequest

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

FAIT!

Final Draft

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) 

J'espère que cela vous a aidé. J'ai laissé tomber certaines choses parce que je pense que vous obtenez les principes fondamentaux.