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

最后用虚拟键盘实现的  , 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 Files\Tesseract-OCR\testdata'}
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 Files\Internet Explorer\IEDriverServer.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 = {'': 205, 'c': 503, 'n': 506, 'z': 501, '': 203, '': 201, 'd': 403, '': 210, 'l': 409, '': 208,
'w': 302,
'u': 307, '': 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, '': 206, '': 202, 'b': 505,
'k': 408,
'': 207, 'q': 301, "'": 411, '\\': 313, 'j': 407, '`': 200, '': 209, 'p': 310, 'o': 309, 't': 305,
'-': 211,
'=': 212, 's': 402, ';': 410}
#需要组合shift的按键。
vk2 = {'"': "'", '#': '', ')': '', '^': '', '?': '/', '>': '.', '<': ',', '+': '=', '*': '', '&': '',
'{': '[', '_': '-',
'|': '\\', '~': '`', ':': ';', '$': '', '}': ']', '%': '', '@': '', '!': '', '(': ''} 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':'', 'password':''})

selenium登录网银,密码控件输入的更多相关文章

  1. 使用WinIo32绕过密码控件实现自动登录

    通过winIO32绕过密码控件,实现自动登录 环境: vmware上安装windows 32位系统:windows xp / windows 7 selenium版本: 3.11.0 IEDriver ...

  2. H5端密码控件自动化测试

    最近在做H5端UI自动化测试,其中遇到了一个棘手问题就是密码控件,因为密码控件的按钮每次都是随机不一样的,没法固定去点击输入密码.密码的输入框是div不是input,所以没法用send_keys()这 ...

  3. PassGuard密码控件配置

    运行环境 win服务器 系统server2008R2 C# ASP.NET服务器页面 前端部分      1.引用 //JS部分引用 <script type="text/javasc ...

  4. 《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)

    1.简介 我们在实际工作中,有可能遇到有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据.网页上日历控件一般,是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期.这 ...

  5. 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)

    1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...

  6. Selenium自动化测试之基本控件使用

    Selenium自动化测试之基本控件使用 1.输入框input: 在Html中样式: <input id="username" type="text"&g ...

  7. EditorGUI控件输入监听

    EditorGUI控件输入监听 在做编辑器开放的过程中,有时候要对用户输入进行判断和限制,但EditorGUI控件却没有触发回调,而是提供了一种麻烦的办法--使用EditorGUI.BeginChan ...

  8. Selenium webdriver 操作日历控件

    一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如: 但是,有的日期控件是readonly的 比如1 ...

  9. Selenium webdriver 之select 控件封装,解决onchange问题

    使用webdriver的时候,select 控件经常会绑定onchange 事件,在selenium2.09 之前click 方法对onchange 事件有bug,2.09 以后修复了,但是根据经验也 ...

随机推荐

  1. 关于torch.norm函数的笔记

    先看一下它的参数: norm(p='fro', dim=None, keepdim=False, dtype=None) p: the order of norm. 一般来说指定 $p = 1, 2$ ...

  2. scanf与gets

    gets函数为什么不能读取字符就往下运行了 这里有一个共性的问题,就是 scanf 输入后,会遗留一个回车符,传递到下面的输入语句: 回车符就会被下面的输入语句接收,而结束了输入,这里就是一个错误的值 ...

  3. 一天一个设计模式——Prototype 原型模式

    一.模式说明 看了比较多的资料,对原型模式写的比较复杂,个人的理解就是模型复制,根据现有的类来直接创建新的类,而不是调用类的构造函数. 那为什么不直接调用new方法来创建类的实例呢,主要一个原因是如果 ...

  4. django数据库读写分离

    django数据库读写分离 1. 配置数据库 settings.py文件中 用SQLite: DATABASES = { 'default': { 'ENGINE': 'django.db.backe ...

  5. you-get使用

    1.pip install you-get 2.如果出错  查看错误bug    you-get http://www.iqiyi.com/v_19rrnqxz7k.html#vfrm=2-4-0-1 ...

  6. 2018CCPC吉林赛区 hdu6555~hdu6566

    2018CCPC吉林赛区(重现赛)- 感谢北华大学 A 基础数论. #include<bits/stdc++.h> using namespace std; typedef long lo ...

  7. 使用代理IP访问网络

    现在很多领域都需要用到代理IP,用到的领域越来越广,如爬虫.投票.抢购等等. 代理IP免费获取地址:http://www.xicidaili.com/(少部分可以用) 我这个案例使用的上面地址里面的免 ...

  8. 工程日记之HelloSlide(2) : UITextView中如何根据给定的长宽,计算最合适的字体大小

    需求描述 一般的需求是将UITextview的大小自适应文本高度,会做出随文本内容增加,文字框不断增大的效果: 本文反其道而行之,在给定文字框大小的情况下:字数越多,字体越小: 需求来源: 考虑将文字 ...

  9. python笔记(很乱)、打算抽个时间再好好整理

    最近刚开始学python.总结的可能不是很好 print:打印值 input:可以进行等候赋值.进行一个交互 python中 需要两个==才为判断 变量:数字.字母.下划线组成 类型:int整数.st ...

  10. TCP三次握手和四次挥手相关

    客户端A 服务端BSYN (建立连接位标识 1为建立联机) ACK (确认位标识 1为确认) seq (一个随机顺序码) ack(一个确认号码,通常为seq+1) 三次握手:1.A 发起建立 连接 的 ...