5

私は正常に動作する 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/'))
4

2 に答える 2

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() オブジェクトとそのメソッドの使用を継承できます。しかし、ユーザー エージェント (「Web ブラウザー」) を指定できるコンポーネントがもう 1 つ不足しています。上記で 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 を指定できることを理解しています。最後に知っておく必要があるのは、ユーザー エージェントの設定方法です。

ユーザー エージェントは 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)

これがお役に立てば幸いです。基本的なことは理解できると思うので、いくつかのことを省略しました。

于 2013-03-08T06:09:49.970 に答える
3
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())
于 2012-12-24T21:39:04.007 に答える