Factorize code of virtual keyboard
This commit is contained in:
parent
1994970385
commit
c34ef464ab
2 changed files with 19 additions and 35 deletions
|
|
@ -19,10 +19,8 @@
|
|||
|
||||
from StringIO import StringIO
|
||||
|
||||
from logging import error
|
||||
|
||||
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
|
||||
|
||||
__all__ = ['LoginPage', 'INGVirtKeyboard', 'StopPage']
|
||||
|
|
@ -43,6 +41,7 @@ class INGVirtKeyboard(VirtKeyboard):
|
|||
color = 64
|
||||
|
||||
def __init__(self, basepage):
|
||||
self.basepage = basepage
|
||||
divkeyboard = basepage.doc.find("//div[@id='clavierdisplayLogin']")
|
||||
if divkeyboard is None:
|
||||
divkeyboard = basepage.doc.find("//div[@id='claviertransfer']")
|
||||
|
|
@ -83,6 +82,18 @@ class INGVirtKeyboard(VirtKeyboard):
|
|||
code += str(y)
|
||||
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):
|
||||
def prelogin(self, login, birthday):
|
||||
|
|
@ -101,26 +112,14 @@ class LoginPage(HTMLPage):
|
|||
|
||||
def login(self, password):
|
||||
# 2) And now, the virtual Keyboard
|
||||
try:
|
||||
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))
|
||||
vk = INGVirtKeyboard(self)
|
||||
|
||||
form = self.get_form(name='mrc')
|
||||
form['mrc:mrg'] = 'mrc:mrg'
|
||||
form['AJAXREQUEST'] = '_viewRoot'
|
||||
form['mrc:mrldisplayLogin'] = vk.get_string_code(realpasswd)
|
||||
form['mrc:mrldisplayLogin'] = vk.get_coordinates('//span[@id="digitpaddisplayLogin"]', password)
|
||||
form.submit()
|
||||
|
||||
|
||||
class StopPage(BasePage):
|
||||
def on_loaded(self):
|
||||
raise BrowserIncorrectPassword('Please login on website to fill the form and retry')
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -17,12 +17,10 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# 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.tools.browser2.page import HTMLPage, LoggedPage, ListElement, ItemElement, method
|
||||
from weboob.tools.browser2.filters import CleanText, CleanDecimal
|
||||
from .login import INGVirtKeyboard
|
||||
from logging import error
|
||||
|
||||
__all__ = ['TransferPage']
|
||||
|
||||
|
|
@ -128,20 +126,7 @@ class TransferPage(LoggedPage, HTMLPage):
|
|||
|
||||
class TransferConfirmPage(HTMLPage):
|
||||
def confirm(self, password):
|
||||
try:
|
||||
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)
|
||||
vk = INGVirtKeyboard(self)
|
||||
|
||||
form = self.get_form(xpath='//div[@id="transfer_panel"]//form')
|
||||
for elem in form:
|
||||
|
|
@ -150,7 +135,7 @@ class TransferConfirmPage(HTMLPage):
|
|||
|
||||
form['AJAXREQUEST'] = '_viewRoot'
|
||||
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()
|
||||
|
||||
@method
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue