2012-11-24 79 views
1

我想覆盖QWebPage类的userAgentForUrl函数,但我做错了什么,并且用户代理仍然是默认的。需要帮助覆盖函数QWebPage.userAgentForUrl()

#! /usr/bin/env python2.7 

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 
import sys 
from bs4 import BeautifulSoup 

class Browser(QWebView, QWebPage): 

    def __init__(self): 
     QWebView.__init__(self) 
     QWebPage.__init__(self) 
     self.frame = self.page().mainFrame() 
     self.loadFinished.connect(self.print_html) 
     self.loadProgress.connect(self.print_progress) 

    def userAgentForUrl(self, url): 
     return "Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1" 

    def print_progress(self, percent): 
     print percent 

    def print_html(self): 
     print "Done" 
     self.fill_form() 
     html = unicode(self.frame.toHtml()).encode('utf-8') 
     soup = BeautifulSoup(html) 
     print soup.prettify() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    br = Browser() 
    br.load(QUrl('http://www.useragentstring.com/')) 
    br.show() 
    app.exec_() 

回答

2

在PyQt中,从多个Qt类继承通常不会工作。所以你需要一个单独的QWebPage子类来覆盖虚拟userAgentForUrl函数。

尝试这样:

class WebPage(QWebPage): 
    def userAgentForUrl(self, url): 
     return "Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1" 

class Browser(QWebView): 
    def __init__(self): 
     QWebView.__init__(self) 
     self.setPage(WebPage()) 
+0

谢谢它的工作原理 – Vor

1
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import sys 
from PySide import QtGui 
from PySide import QtWebKit 

app = QtGui.QApplication(sys.argv) 

user_agent = QtWebKit.QWebPage() 
user_agent.userAgentForUrl = lambda x: 'Firefox/17.0' 

webkit = QtWebKit.QWebView() 
webkit.setPage(user_agent) 
webkit.load('http://www.whatsmyuseragent.com') 
webkit.show() 

app.exec_()