2010-07-17 86 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) 

我希望这有助于你。我忽略了一些事情,因为我认为你得到了基本面。

相关问题