zoukankan      html  css  js  c++  java
  • selenium登录网银,密码控件输入

    尝试登录农行网银,发现带控件的密码输入框怎么都无法输入啊

    最后用虚拟键盘实现的  , DD模拟键盘 http://www.ddxoft.com/

    图形验证码识别没过,有时间再继续

    需要安装  Tesseract-OCR   IEdriver   ,dd下载dll

    # _*_ coding: utf-8 _*_
    import os, sys
    import uuid, time
    import pytesseract
    from selenium import webdriver
    from ctypes import windll
    from PIL import Image
    
    
    def tesseract_file(file_path):
            #my_env = {'TESSDATA_PREFIX': r'C:Program FilesTesseract-OCR	estdata'}
            image = Image.open(os.path.realpath(file_path))
            result = pytesseract.image_to_string(image)
            return result
    
    def login_abc(param):
            url = 'https://perbank.abchina.com/EbankSite/startup.do'
            ie_driver = 'C:Program FilesInternet ExplorerIEDriverServer.exe'
            #os.environ["webdriver.ie.driver"] = ie_driver
            browser = webdriver.Ie(ie_driver)
            browser.maximize_window()
            browser.get(url)
            time.sleep(1)
    
            browser.find_element_by_id('username').send_keys(param['username'])
    
            #载入DD
            libpath = 'libs/DD81200x32.dll' if sys.platform == 'win32' else 'libs/DD81200x64.32.dll'
            dd_dll = windll.LoadLibrary(libpath)
    
            vk = {'5': 205, 'c': 503, 'n': 506, 'z': 501, '3': 203, '1': 201, 'd': 403, '0': 210, 'l': 409, '8': 208,
                  'w': 302,
                  'u': 307, '4': 204, 'e': 303, '[': 311, 'f': 404, 'y': 306, 'x': 502, 'g': 405, 'v': 504, 'r': 304,
                  'i': 308,
                  'a': 401, 'm': 507, 'h': 406, '.': 509, ',': 508, ']': 312, '/': 510, '6': 206, '2': 202, 'b': 505,
                  'k': 408,
                  '7': 207, 'q': 301, "'": 411, '\': 313, 'j': 407, '`': 200, '9': 209, 'p': 310, 'o': 309, 't': 305,
                  '-': 211,
                  '=': 212, 's': 402, ';': 410}
            #需要组合shift的按键。
            vk2 = {'"': "'", '#': '3', ')': '0', '^': '6', '?': '/', '>': '.', '<': ',', '+': '=', '*': '8', '&': '7',
                   '{': '[', '_': '-',
                   '|': '\', '~': '`', ':': ';', '$': '4', '}': ']', '%': '5', '@': '2', '!': '1', '(': '9'}
    
            def down_up(code):
                dd_dll.DD_key(vk[code], 1)
                dd_dll.DD_key(vk[code], 2)
    
            def dd(key):
                if i.isupper():
                    # 按下抬起 500是shift键码
                    dd_dll.DD_key(500, 1)
                    down_up(i.lower())
                    dd_dll.DD_key(500, 2)
    
                elif i in '~!@#$%^&*()_+{}|:"<>?':
                    dd_dll.DD_key(500, 1)
                    down_up(vk2[i])
                    dd_dll.DD_key(500, 2)
                else:
                    down_up(i)
    
            img = browser.find_element_by_id('vCode')
            x, y = img.location['x'] + 50, img.location['y'] + 50
    
            #移动到密码框点击激活
            dd_dll.DD_mov(x, y)
            dd_dll.DD_btn(1)
            time.sleep(1)
    
            #依次输入密码字符
            for i in param['password']:
                dd(i)
                time.sleep(0.2)
    
            left, top = img.location['x'], img.location['y']
            width, height = img.size['width'] + left, img.size['height'] + top
            os.makedirs('imgs')
            oldpath = 'imgs/' + str(uuid.uuid1()) + '.png'
            browser.save_screenshot(oldpath)
            oldpic = Image.open(oldpath)
            newpic = oldpic.crop((left, top, width, height))
            picpath = 'imgs/' + str(uuid.uuid1()) + '.png'
            newpic.save(picpath)
            os.remove(oldpath)
            
            #tesseract可以识别简单的图形验证码
            vcode = tesseract_file(picpath)
            browser.find_element_by_name('code').send_keys(vcode)
            
            #os.remove(picpath)
            browser.find_element_by_id('logo').click()
    
            time.sleep(1)
            logerr = browser.find_element_by_class_name('logon-error').text
            print(logerr)
    
    if __name__ == '__main__':
        login_abc({'username':'13311111111', 'password':'123456'})
  • 相关阅读:
    Hackers' Crackdown UVA
    Sequence II HDU
    To the moon HDU
    Dynamic Rankings ZOJ
    google vimium插件的一些简单命令
    关于datatable转换datatime类型的问题
    服务器无法播放flv格式的视频解决办法
    DTCMS 新建下拉列表控件
    ajax 返回数据 无法得到其属性的解决办法
    关于IIS中WEB网站访问弹“验证输入框”及“401限制访问”的解决办法
  • 原文地址:https://www.cnblogs.com/6min/p/10868825.html
Copyright © 2011-2022 走看看