Форум сайта python.su
0
Всем доброго!
Подскажите пожалуйста, как можно программно проверить авторизовал меня сайт в WebView или нет?
Загружаю сайт и авторизовываюсь следующим образом:
# -*- coding: utf-8 -*- from PySide import QtGui from PySide import QtCore from PySide import QtWebKit import sys app = QtGui.QApplication(sys.argv) web = QtWebKit.QWebView() web.load(QtCore.QUrl("http://www.anysite.com")) def fillForm(): #Авторизация на сайте!!! doc = web.page().mainFrame().documentElement() user = doc.findFirst("input[id=username]") passwd = doc.findFirst("input[id=passwd]") user.setAttribute("value", "test") passwd.setAttribute("value", "test") form = doc.findFirst("form[id=login-form]") form.evaluateJavaScript('this.submit()') QtCore.QObject.disconnect(web, QtCore.SIGNAL("loadFinished(bool)"), fillForm) #QtCore.QObject.connect(web, QtCore.SIGNAL("loadFinished(bool)"), fillForm) #web.loadFinished.connect(fillForm) QtCore.QObject.connect(web, QtCore.SIGNAL("loadFinished(bool)"), fillForm) web.show() app.exec_()
Офлайн
173
Cover StoryИскать элементы, ссылки или текст “Выйти”, “logout” и т.п. Зависит от сайта.
как можно программно проверить авторизовал меня сайт в WebView или нет?
Офлайн
0
Спасибо, почти разобрался. Единственный момент мешает спокойно жить необходимо чтобы Webview не загружал первую страницу (неавторизованную) страницу, а сразу начинал со второй, либо при проверке авторизации первая страница не учитывалась. А то выскакивает два сообщение сначала “НЕ авторизован”, а потом “авторизован”
Вот кусок кода который получился:
# -*- coding: utf-8 -*- from PySide import QtGui from PySide import QtCore from PySide import QtWebKit import sys def fillForm(): #Авторизация на сайте. doc = web.page().mainFrame().documentElement() user = doc.findFirst("input[id=username]") passwd = doc.findFirst("input[id=passwd]") user.setAttribute("value", "test") passwd.setAttribute("value", "test") form = doc.findFirst("form[id=login-form]") form.evaluateJavaScript('this.submit()') QtCore.QObject.disconnect(web, QtCore.SIGNAL("loadFinished(bool)"), fillForm) def searchExit(): #Проверка авторизации. doc = web.page().mainFrame().documentElement() auth = doc.findFirst("input[name=task]") if auth.attribute("value") == "logout": QtGui.QMessageBox.warning(web, u'Вы авторизованы!', u'Вы авторизованы!') else: QtGui.QMessageBox.warning(web, u'Вы НЕ авторизованы!', u'Вы НЕ авторизованы!') app = QtGui.QApplication(sys.argv) web = QtWebKit.QWebView() url = QtCore.QUrl("http://www.anysite.com") web.load(url) QtCore.QObject.connect(web, QtCore.SIGNAL("loadFinished(bool)"), fillForm) QtCore.QObject.connect(web, QtCore.SIGNAL("loadFinished(bool)"), searchExit) web.show() app.exec_()
Офлайн
173
Cover StoryПотому что searchExit подписана на loadFinished в самом начале, а нужно подписываться в fillForm.
А то выскакивает два сообщение сначала “НЕ авторизован”, а потом “авторизован”
Офлайн
0
Извините не понял, что значит searchExit подписана на loadFinished, а как нужно сделать?
Офлайн
173
Cover Story
Извините не понял, что значит searchExit подписана на loadFinished, а как нужно сделать?
... def fillForm(): QtCore.QObject.connect(web, QtCore.SIGNAL("loadFinished(bool)"), searchExit) QtCore.QObject.disconnect(web, QtCore.SIGNAL("loadFinished(bool)"), fillForm) ... def searchExit(): QtCore.QObject.disconnect(web, QtCore.SIGNAL("loadFinished(bool)"), searchExit) ... ... web.load(url) QtCore.QObject.connect(web, QtCore.SIGNAL("loadFinished(bool)"), fillForm) web.show() app.exec_()
web.loadFinished.connect(fillForm)
Отредактировано reclosedev (Дек. 17, 2012 14:01:40)
Офлайн
0
Спасибо большое, тему можно закрыть.
Офлайн
0
Извиняюсь, еще один момент не могу разобрать:
#Авторизация на сайте!!! def fillForm(self): self.web.loadFinished.connect(self.searchExit) self.web.loadFinished.disconnect(self.fillForm) doc = self.web.page().mainFrame().documentElement() user = doc.findFirst("input[id=modlgn-username]") passwd = doc.findFirst("input[id=modlgn-passwd]") user.setAttribute("value", self.log) passwd.setAttribute("value", self.pas) form = doc.findFirst("form[id=login-form]") form.evaluateJavaScript('this.submit()') #Проверка авторизации. def searchExit(self): self.web.loadFinished.disconnect(self.searchExit) doc1 = self.web.page().mainFrame().documentElement() auth = doc1.findFirst("input[name=task]") if auth.attribute("value") == "user.logout": self.area.show() QtGui.QMessageBox.warning(self.web, u'Вы авторизованы!', u'Вы авторизованы!') else: QtGui.QMessageBox.warning(self.web, u'Вы НЕ авторизованы!', u'Вы НЕ авторизованы!') self.log = "test" self.pas = "test" self.web.loadFinished.connect(self.fillForm)
Офлайн