【问题标题】:Setting useragent in QWebView在 QWebView 中设置用户代理
【发布时间】:2010-07-17 19:46:12
【问题描述】:

我有一个 QWebView,它工作正常。然后,使用 spynner 的代码,我尝试将 useragent 方法绑定到自定义方法。这似乎在 spynner(带有 QWebPage)中工作,但不是在这里。非常感谢任何帮助。代码:

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

【问题讨论】:

标签: python pyqt4 qwebview qwebpage


【解决方案1】:

我希望这会有所帮助...

您的代码

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

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

连接点

好的,现在让我们一起来吧。我们知道 QUrl 是一个 QNetworkRequest() 对象,我们可以使用 QNetworkRequest 指定 url。我们需要知道的最后一件事是如何设置用户代理。

User Agent 是使用 QNetworkRequest 的 setRawHeader(string, string) 方法设置的

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)

我希望这对您有所帮助。我遗漏了一些东西,因为我认为你掌握了基础知识。

【讨论】:

    【解决方案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())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 2012-05-02
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多