Установка useragent в QWebView - PullRequest
       63

Установка useragent в QWebView

4 голосов
/ 17 июля 2010

У меня есть 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 ]

6 голосов
/ 08 марта 2013

Надеюсь, это поможет ...

Ваш код

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 () и его методов.Но вам не хватает еще одного компонента, который позволяет вам указать User Agent («Веб-браузер»).Обратите внимание, что выше я выписал сигнатуру для метода 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 (), и мы можем указать URL, используя QNetworkRequest.Последнее, что нам нужно знать, это как настроить User Agent.

Пользовательский агент устанавливается с помощью setRawHeader (string, string) методом QNetworkRequest

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

DONE!

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)

Надеюсь, это помогло вам.Я упустил несколько вещей, потому что я думаю, что вы получите основы.

2 голосов
/ 25 декабря 2012
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())
...