Factorize code of virtual keyboard

This commit is contained in:
Florent 2014-04-01 14:42:43 +02:00
commit c34ef464ab
2 changed files with 19 additions and 35 deletions

View file

@ -19,10 +19,8 @@
from StringIO import StringIO from StringIO import StringIO
from logging import error
from weboob.tools.browser import BasePage, BrowserIncorrectPassword from weboob.tools.browser import BasePage, BrowserIncorrectPassword
from weboob.tools.captcha.virtkeyboard import VirtKeyboard, VirtKeyboardError from weboob.tools.captcha.virtkeyboard import VirtKeyboard
from weboob.tools.browser2.page import HTMLPage from weboob.tools.browser2.page import HTMLPage
__all__ = ['LoginPage', 'INGVirtKeyboard', 'StopPage'] __all__ = ['LoginPage', 'INGVirtKeyboard', 'StopPage']
@ -43,6 +41,7 @@ class INGVirtKeyboard(VirtKeyboard):
color = 64 color = 64
def __init__(self, basepage): def __init__(self, basepage):
self.basepage = basepage
divkeyboard = basepage.doc.find("//div[@id='clavierdisplayLogin']") divkeyboard = basepage.doc.find("//div[@id='clavierdisplayLogin']")
if divkeyboard is None: if divkeyboard is None:
divkeyboard = basepage.doc.find("//div[@id='claviertransfer']") divkeyboard = basepage.doc.find("//div[@id='claviertransfer']")
@ -83,6 +82,18 @@ class INGVirtKeyboard(VirtKeyboard):
code += str(y) code += str(y)
return code return code
def get_coordinates(self, xpath, password):
temppasswd = ""
span = self.basepage.doc.find(xpath)
for i, font in enumerate(span.getiterator('font')):
if font.attrib.get('class') == "vide":
temppasswd += password[i]
self.basepage.browser.logger.debug('We are looking for : ' + temppasswd)
coordinates = self.get_string_code(temppasswd)
self.basepage.browser.logger.debug("Coordonates: " + coordinates)
return coordinates
class LoginPage(HTMLPage): class LoginPage(HTMLPage):
def prelogin(self, login, birthday): def prelogin(self, login, birthday):
@ -101,26 +112,14 @@ class LoginPage(HTMLPage):
def login(self, password): def login(self, password):
# 2) And now, the virtual Keyboard # 2) And now, the virtual Keyboard
try:
vk = INGVirtKeyboard(self) vk = INGVirtKeyboard(self)
except VirtKeyboardError as err:
error("Error: %s" % err)
return False
realpasswd = ""
span = self.doc.find('//span[@id="digitpaddisplayLogin"]')
for i, font in enumerate(span.getiterator('font')):
if font.attrib.get('class') == "vide":
realpasswd += password[i]
self.browser.logger.debug('We are looking for : ' + realpasswd)
self.browser.logger.debug("Coordonates: " + vk.get_string_code(realpasswd))
form = self.get_form(name='mrc') form = self.get_form(name='mrc')
form['mrc:mrg'] = 'mrc:mrg' form['mrc:mrg'] = 'mrc:mrg'
form['AJAXREQUEST'] = '_viewRoot' form['AJAXREQUEST'] = '_viewRoot'
form['mrc:mrldisplayLogin'] = vk.get_string_code(realpasswd) form['mrc:mrldisplayLogin'] = vk.get_coordinates('//span[@id="digitpaddisplayLogin"]', password)
form.submit() form.submit()
class StopPage(BasePage): class StopPage(BasePage):
def on_loaded(self): pass
raise BrowserIncorrectPassword('Please login on website to fill the form and retry')

View file

@ -17,12 +17,10 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.captcha.virtkeyboard import VirtKeyboardError
from weboob.capabilities.bank import Recipient, AccountNotFound, Transfer from weboob.capabilities.bank import Recipient, AccountNotFound, Transfer
from weboob.tools.browser2.page import HTMLPage, LoggedPage, ListElement, ItemElement, method from weboob.tools.browser2.page import HTMLPage, LoggedPage, ListElement, ItemElement, method
from weboob.tools.browser2.filters import CleanText, CleanDecimal from weboob.tools.browser2.filters import CleanText, CleanDecimal
from .login import INGVirtKeyboard from .login import INGVirtKeyboard
from logging import error
__all__ = ['TransferPage'] __all__ = ['TransferPage']
@ -128,20 +126,7 @@ class TransferPage(LoggedPage, HTMLPage):
class TransferConfirmPage(HTMLPage): class TransferConfirmPage(HTMLPage):
def confirm(self, password): def confirm(self, password):
try:
vk = INGVirtKeyboard(self) vk = INGVirtKeyboard(self)
except VirtKeyboardError as err:
error("Error: %s" % err)
return
realpasswd = ""
span = self.doc.find('//span[@id="digitpadtransfer"]')
for i, font in enumerate(span.getiterator('font')):
if font.attrib.get('class') == "vide":
realpasswd += password[i]
self.browser.logger.debug('We are looking for : ' + realpasswd)
coordinates = vk.get_string_code(realpasswd)
self.browser.logger.debug("Coordonates: " + coordinates)
form = self.get_form(xpath='//div[@id="transfer_panel"]//form') form = self.get_form(xpath='//div[@id="transfer_panel"]//form')
for elem in form: for elem in form:
@ -150,7 +135,7 @@ class TransferConfirmPage(HTMLPage):
form['AJAXREQUEST'] = '_viewRoot' form['AJAXREQUEST'] = '_viewRoot'
form['%s:mrgtransfer' % form.name] = '%s:mrgtransfer' % form.name form['%s:mrgtransfer' % form.name] = '%s:mrgtransfer' % form.name
form['%s:mrltransfer' % form.name] = coordinates form['%s:mrltransfer' % form.name] = vk.get_coordinates('//span[@id="digitpadtransfer"]', password)
form.submit() form.submit()
@method @method