2012-05-03 5 views
0

Я загружаю веб-страницу в PySide. Я хочу видеть, успешно ли он загружен без ошибок. Если я получу ошибку, то я хочу знать об этом. Я не могу просто использовать параметр «успех» для сигнала, заполненного загрузкой, поскольку он всегда указывает на успех. Единственный способ я знаю, как это сделать, чтобы сделать что-то вроде этого:QWebPage - Получение списка ресурсов/Проверка страницы без ошибок

class WebPageResourceTracker(
    PySide.QtCore.QObject 
): 
    def __init__(self, url): 
     PySide.QtCore.QObject.__init__(self) 
     self.page = PySide.QtWebKit.QWebPage() 
     self.frame = self.page.currentFrame() 

     # The reason for the lambda is that otherwise I get this: 
     #ASSERT: "self" in file /var/tmp/portage/dev-python/pyside-1.1.0/work/pyside-qt4.7+1.1.0/libpyside/signalmanager.cpp, line 534 
     self.frame.loadFinished.connect(lambda ok: self.onLoadFinished(ok)) 
     self.page.networkAccessManager().finished.connect(lambda reply: self.onResourceFinished(reply)) 

     self.frame.setUrl(
      PySide.QtCore.QUrl(
       url, 
      ) 
     ) 


    def onLoadFinished(self, ok): 
     print 'onLoadFinished', ok 

    def onResourceFinished(self, reply): 
     print 'onResourceFinished', reply.url().toString(), reply.error() 



import sys 
from PySide import QtGui 

app = QtGui.QApplication(sys.argv) 
#WebPageResourceTracker("http://google.com") 
WebPageResourceTracker(
    "http://migration.tanagerproductions.com/broken.html" 
) 
sys.exit(app.exec_()) 

Но, я предположил бы, что было бы способ прямого доступа к списку ресурсов для страницы, так как Webkit инспектора, может перечислить ресурсы ...

Бонус: Я также хотел бы знать, есть ли какие-либо ошибки JavaScript на странице, как бы я это сделал?

ответ

1

Одним из способов сделать это было бы сначала создать новый класс, наследующий от QNetworkManager, который переопределяет QNetworkAccessManager::createRequest. В вашей функции createRequest вы сначала вызываете базовый/суперкласс для получения запроса, затем подключаетесь к сигналу QNetworkReply::error или QNetworkReply::finished и проверяете функцию QNetworkReply::error.

Тогда вы можете установить этот заказ QNetworkAccessManager на QWebPage с помощью QWebPage::setNetworkAccessManager.

Чтобы перехватить сообщения JavaScript, вы создаете новый класс, наследующий от QWebPage, который переопределяет QWebPage::javaScriptConsoleMessage. Любые ошибки или звонки в console.log будут переданы этой функции:

Эта функция вызывается всякий раз, когда программа JavaScript пытается распечатать сообщение на консоли веб-браузера. Например, в случае ошибок оценки URL-адрес источника может быть указан в исходном идентификаторе, а также в строке строки.

Примечание: Этот ответ подразумевает, что PySide предоставляет полный Qt API, я на самом деле не проверил это возможно в Python, но это так, как я раньше делал подобные вещи в C++.

 Смежные вопросы

  • Нет связанных вопросов^_^