Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 16, 2012 11:23:40

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyside: Проверка авторизации при заходе на сайт

Всем доброго!
Подскажите пожалуйста, как можно программно проверить авторизовал меня сайт в 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_()
Для работы использую Python 2.7.3 и PySide 1.1.2



Python 2.7.3
Pyside 1.1.2

Офлайн

#2 Дек. 16, 2012 11:49:31

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Pyside: Проверка авторизации при заходе на сайт

Cover Story
как можно программно проверить авторизовал меня сайт в WebView или нет?
Искать элементы, ссылки или текст “Выйти”, “logout” и т.п. Зависит от сайта.

Офлайн

#3 Дек. 17, 2012 11:31:10

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyside: Проверка авторизации при заходе на сайт

Спасибо, почти разобрался. Единственный момент мешает спокойно жить необходимо чтобы 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_()



Python 2.7.3
Pyside 1.1.2

Офлайн

#4 Дек. 17, 2012 11:57:46

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Pyside: Проверка авторизации при заходе на сайт

Cover Story
А то выскакивает два сообщение сначала “НЕ авторизован”, а потом “авторизован”
Потому что searchExit подписана на loadFinished в самом начале, а нужно подписываться в fillForm.

Посмотрите в сторону специальных удобных оберток над QtWebkit:
https://github.com/makinacorpus/spynner
http://jeanphix.me/Ghost.py/

Офлайн

#5 Дек. 17, 2012 13:23:42

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyside: Проверка авторизации при заходе на сайт

Извините не понял, что значит searchExit подписана на loadFinished, а как нужно сделать?



Python 2.7.3
Pyside 1.1.2

Офлайн

#6 Дек. 17, 2012 14:01:10

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Pyside: Проверка авторизации при заходе на сайт

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)
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html

Отредактировано reclosedev (Дек. 17, 2012 14:01:40)

Офлайн

#7 Дек. 18, 2012 14:08:49

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyside: Проверка авторизации при заходе на сайт

Спасибо большое, тему можно закрыть.



Python 2.7.3
Pyside 1.1.2

Офлайн

#8 Дек. 29, 2012 13:50:05

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyside: Проверка авторизации при заходе на сайт

Извиняюсь, еще один момент не могу разобрать:

    #Авторизация на сайте!!!
    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)
В случае если я хочу еще раз вызвать fillForm, то ничего не происходит. Как быть?



Python 2.7.3
Pyside 1.1.2

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version