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 以后修复了,但是根据经验也 ...
随机推荐
- 关于torch.norm函数的笔记
先看一下它的参数: norm(p='fro', dim=None, keepdim=False, dtype=None) p: the order of norm. 一般来说指定 $p = 1, 2$ ...
- scanf与gets
gets函数为什么不能读取字符就往下运行了 这里有一个共性的问题,就是 scanf 输入后,会遗留一个回车符,传递到下面的输入语句: 回车符就会被下面的输入语句接收,而结束了输入,这里就是一个错误的值 ...
- 一天一个设计模式——Prototype 原型模式
一.模式说明 看了比较多的资料,对原型模式写的比较复杂,个人的理解就是模型复制,根据现有的类来直接创建新的类,而不是调用类的构造函数. 那为什么不直接调用new方法来创建类的实例呢,主要一个原因是如果 ...
- django数据库读写分离
django数据库读写分离 1. 配置数据库 settings.py文件中 用SQLite: DATABASES = { 'default': { 'ENGINE': 'django.db.backe ...
- you-get使用
1.pip install you-get 2.如果出错 查看错误bug you-get http://www.iqiyi.com/v_19rrnqxz7k.html#vfrm=2-4-0-1 ...
- 2018CCPC吉林赛区 hdu6555~hdu6566
2018CCPC吉林赛区(重现赛)- 感谢北华大学 A 基础数论. #include<bits/stdc++.h> using namespace std; typedef long lo ...
- 使用代理IP访问网络
现在很多领域都需要用到代理IP,用到的领域越来越广,如爬虫.投票.抢购等等. 代理IP免费获取地址:http://www.xicidaili.com/(少部分可以用) 我这个案例使用的上面地址里面的免 ...
- 工程日记之HelloSlide(2) : UITextView中如何根据给定的长宽,计算最合适的字体大小
需求描述 一般的需求是将UITextview的大小自适应文本高度,会做出随文本内容增加,文字框不断增大的效果: 本文反其道而行之,在给定文字框大小的情况下:字数越多,字体越小: 需求来源: 考虑将文字 ...
- python笔记(很乱)、打算抽个时间再好好整理
最近刚开始学python.总结的可能不是很好 print:打印值 input:可以进行等候赋值.进行一个交互 python中 需要两个==才为判断 变量:数字.字母.下划线组成 类型:int整数.st ...
- TCP三次握手和四次挥手相关
客户端A 服务端BSYN (建立连接位标识 1为建立联机) ACK (确认位标识 1为确认) seq (一个随机顺序码) ack(一个确认号码,通常为seq+1) 三次握手:1.A 发起建立 连接 的 ...