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 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登录网银,密码控件输入的更多相关文章
- 使用WinIo32绕过密码控件实现自动登录
通过winIO32绕过密码控件,实现自动登录 环境: vmware上安装windows 32位系统:windows xp / windows 7 selenium版本: 3.11.0 IEDriver ...
- H5端密码控件自动化测试
最近在做H5端UI自动化测试,其中遇到了一个棘手问题就是密码控件,因为密码控件的按钮每次都是随机不一样的,没法固定去点击输入密码.密码的输入框是div不是input,所以没法用send_keys()这 ...
- PassGuard密码控件配置
运行环境 win服务器 系统server2008R2 C# ASP.NET服务器页面 前端部分 1.引用 //JS部分引用 <script type="text/javasc ...
- 《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)
1.简介 我们在实际工作中,有可能遇到有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据.网页上日历控件一般,是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期.这 ...
- 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...
- Selenium自动化测试之基本控件使用
Selenium自动化测试之基本控件使用 1.输入框input: 在Html中样式: <input id="username" type="text"&g ...
- EditorGUI控件输入监听
EditorGUI控件输入监听 在做编辑器开放的过程中,有时候要对用户输入进行判断和限制,但EditorGUI控件却没有触发回调,而是提供了一种麻烦的办法--使用EditorGUI.BeginChan ...
- Selenium webdriver 操作日历控件
一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如: 但是,有的日期控件是readonly的 比如1 ...
- Selenium webdriver 之select 控件封装,解决onchange问题
使用webdriver的时候,select 控件经常会绑定onchange 事件,在selenium2.09 之前click 方法对onchange 事件有bug,2.09 以后修复了,但是根据经验也 ...
随机推荐
- 一个例子搞清楚Java程序执行顺序
当我们new一个GirlFriend时,我们都做了什么? 一个例子搞懂Java程序运行顺序 public class Girl { Person person = new Person("G ...
- javaScript_BOM浏览器对象模型
BOM:浏览器对象模型 Browser Object Model 用来访问和操作浏览器窗口,使JavaScript有能力与浏览器对话 通过使用BOM ,可以移动窗口,更改状态栏.执行其他不与页面内容发 ...
- 1)warning LNK4233
名称 test.exe 包含非 ASCII 字符,在具有除 936 以外的 ANSI 代码页的系统上可能不能加载 DLL 名称 练习动态库.dll 包含非 ASCII 字符,如果系统没有与用于链接此 ...
- ssh 账号密码登录设置
找到/etc/ssh/sshd_config文件中的 PasswordAuthentication no 改为PasswordAuthentication yes 并保存. 重启ssh服务:sudo ...
- tf调试函数
Tensorflow之调试(Debug)及打印变量 参考资料:https://wookayin.github.io/tensorflow-talk-debugging 几种常用方法: 1.通过Se ...
- 微信H5支付,成功样例
<?php/** * Created by PhpStorm. * User: Administrator * Date: 2019/6/3 * Time: 12:00 */ if( !defi ...
- JavaScript—飞机大战2版
前面的思路对了 BUG 出在了计时器和没有加判断页面是否存在元素 <!DOCTYPE html> <html lang="en"> <head> ...
- nginx_tcp_proxy代理酸酸乳
一.安装低版本的nginx(高版本不支持tcp代理模块:nginx_tcp_proxy_module)Nginx默认只支持http反向代理,要支持tcp反向代理,需在编译时增加tcp代理模块[ngin ...
- 24.docker 部署 wordPress
1. 拉取远程 mysql 和 wordpress 镜像 并 启动起来 使用 docker pull mysql:5.7.27 docker pull wordpress 2. 创建mysql 的 c ...
- HashMap看这篇就够了
HashMap看这篇就够了 一文读懂HashMap Java8容器源码-目录