在QWebView中设置用户代理

5 投票
2 回答
5803 浏览
提问于 2025-04-16 01:27

我有一个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/'))

2 个回答

3

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们可以在网上找到很多帮助,比如StackOverflow这个网站。这个网站上有很多程序员分享他们的经验和解决方案。

当你在StackOverflow上提问时,最好能把你的问题描述得清楚明了。这样其他人才能更好地理解你的问题,并给出有效的建议。比如,你可以提供一些代码示例,说明你遇到的具体情况,以及你尝试过的解决方法。

另外,记得在提问之前先搜索一下,看看是否有人遇到过类似的问题。这样可以节省时间,也能让你更快找到答案。

总之,提问时要清晰、具体,并且尽量提供相关的信息,这样才能更容易得到帮助。

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())
7

希望这对你有帮助...

你的代码

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

恰好你在调用时使用了 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 来指定网址。最后我们需要知道的是如何设置用户代理。

用户代理是通过 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)

希望这对你有帮助。我省略了一些内容,因为我觉得你已经掌握了基础知识。

撰写回答