很多系统为了防止坏人,会增加各样形式的验证码,做测试最头痛的莫过于验证码的处理,验证码的处理一般分为三种方法

1.开发给我们设置一个万能的验证码;

2.开发将验证码给屏蔽掉;

3.自己识别图片的上的千奇百怪的图片,但是这样的方法识别成功率不是特别的高,而且也不是对所有的都可以识别,只是识别一些简单的验证码;

4.可以调用其他的服务商的验证码识别的接口,我从阿里云的云市场找到一家验证码识别的接口,0.9元可以调用大概是60次(0.01元20次,我不知道自己为何傻乎乎的花了0.9元买了60次的规格);

这里主要使用到了pytesseract和PIL两个模块,首先我们搭建一下环境

pip install Pillow
pip install pytesseract
由于Python-tesseract是一个基于google's Tesseract-OCR的独立封装包,那么我们需要下载Tesseract-OCR进行安装,window下安装记住需要配置环境变量

下面我们直接看一下具体的实例

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
from PIL import Image,ImageEnhance
import pytesseract def get_auth_code(driver,codeEelement):
'''获取验证码'''
driver.save_screenshot('login/login.png') #截取登录页面
imgSize = codeEelement.size #获取验证码图片的大小
imgLocation = imgElement.location #获取验证码元素坐标
rangle = (int(imgLocation['x']),int(imgLocation['y']),int(imgLocation['x'] + imgSize['width']),int(imgLocation['y']+imgSize['height'])) #计算验证码整体坐标
login = Image.open("login/login.png")
frame4=login.crop(rangle) #截取验证码图片
frame4.save('login/authcode.png')
authcodeImg = Image.open('login/authcode.png')
authCodeText = pytesseract.image_to_string(authcodeImg).strip()
return authCodeText def pandarola_login(driver,account,passwd,authCode):
'''登录pandarola系统'''
driver.find_element_by_id('loginname').send_keys(account)
driver.find_element_by_id('password').send_keys(passwd)
driver.find_element_by_id('code').send_keys(authCode)
driver.find_element_by_id('to-recover').click()
time.sleep(2)
title = driver.find_element_by_id('menuName-h').text #获取登录的标题
'''验证是否登录成功'''
try:
assert title == u'桌面'
return '登录成功'
except AssertionError as e:
return '登录失败' if __name__ == '__main__': driver = webdriver.Chrome()
driver.get('http://pandarola.pandadata.cn')
driver.maximize_window()
imgElement = driver.find_element_by_id('codeImg')
authCodeText = get_auth_code(driver,imgElement)
pandarola_login(driver,'admin','',authCodeText)
driver.quit()

由于我们系统属于内部系统,验证码比较简单,所以很轻松的识别了,但是有时候2和Z无法识别,只要登录失败重新获取再次登录即可。毕竟自己写的验证码识别,识别的成功的几率还时比较低,所以我这边从阿里云的云市场找到了一家公司,用他们的接口来识别,最起码公司的几个系统的验证码问题全部解决了,再也不用求开发了。

ps:

  这里包含了接口的说明文档,大概可以自己看一下,https://market.aliyun.com/products/57126001/cmapi014396.html#sku=yuncode839600006,我这边演示下通过这个接口来识别验证码。

#-*- coding:utf-8 -*-
import base64
import requests
import json
def read_picture_base64(fileNmae):
'''验证码图片 base64加密格式'''
with open(fileNmae,'rb') as f:
base64Picture = base64.b64encode(f.read())
return base64Picture.decode() def authcode_picture_convert_string(appCode,querys,base64Picture): #appCode 接口的认证key,querys 验证码类型
'''通过第三方结果获取验证码'''
header = {
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8', #根据API的要求,定义相对应的Content-Type
"Authorization":"APPCODE "+ appCode
}
url = 'http://jisuyzmsb.market.alicloudapi.com/captcha/recognize' #调用地址
bodys = {'type':querys,'pic':base64Picture} #请求参数
res = requests.post(url,headers=header,data=bodys)
return res.text if __name__ == '__main__':
appCode = '377e5f0fe10146ef9aa88bae756a3904'
querys = 'e4'
base64Picture = read_picture_base64('login/20170629232535.png')
text = authcode_picture_convert_string(appCode,querys,base64Picture)
authCode = json.loads(text)['result']['code'] #解析返回的结果
print(authCode)

python selenium-webdriver 登录验证码的处理(十二)的更多相关文章

  1. Python Selenium Cookie 绕过验证码实现登录

    Python Selenium Cookie 绕过验证码实现登录 之前介绍过博客园的通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍 1.1. ...

  2. 使用Python+Selenium模拟登录QQ空间

    使用Python+Selenium模拟登录QQ空间爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleniu ...

  3. Python+Selenium+webdriver环境搭建(windows)以及相关资源下载链接

    今天记录一下测试小菜鸟alter在测试入门的一点关于python+Selenium+webdriver环境搭建的经历以及资源分享.欢迎交流学习,批评指正. 一.Python的下载与安装 1.pytho ...

  4. python selenium webdriver入门基本操作

    python selenium webdriver入门基本操作 未经作者允许,禁止转载! from selenium import webdriver import time driver=webdr ...

  5. Python Selenium Webdriver常用方法总结

    Python Selenium Webdriver常用方法总结 常用方法函数 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() 最大化窗口: m ...

  6. Selenium WebDriver + Grid2 + RSpec之旅(二)----Grid2的配置

    Selenium WebDriver + Grid2 + RSpec之旅(二) ----Grid2的配置 为什么要使用Selenium-Grid 分布式运行大规模的TestCase 能够通过一个中央节 ...

  7. Python + Selenium 实现登录Office 365

    最近捡起之前用的Python + Selenium实现工作中需要的登录Office 365功能.(吐槽:国内网络真是卡,登录Office 365实属不易.另外Selenium这样的网站都要墙,无法理解 ...

  8. Python+ Selenium自动化登录腾讯QQ邮箱实例

    学习了Python语言一段时间后,在公司的项目里也使用到了python来写测试脚本,一些重复的操作都使用脚本来处理了.大大的提高工作效率,减少了一些手工重复的操作. 以下是使用unittest框架写的 ...

  9. python+selenium实现登录账户

    selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Gr ...

  10. 使用Python + Selenium破解滑块验证码

    在前面一篇博客<使用 Python + Selenium 打造浏览器爬虫>中,我介绍了 Selenium 的基本用法和爬虫开发过程中经常使用的一些小技巧,利用这些写出一个浏览器爬虫已经完全 ...

随机推荐

  1. docker学习构建镜像---第三章节

    一.docker镜像使用 运行docker容器时,使用的镜像如果在本地不存在,docker会自动从docker镜像仓库中下载,默认是从docker hub公共镜像源下载 在这里,我们需要了解:管理和使 ...

  2. CRC8反转校验

    最近在做项目遇到一个问题,就是需要对数据进行CRC8校验,多项式是 X7+X6+X5+X2+1,对应的二进制表达是 11100101,但是因为传输反转所以我们这里的多项式二进制表达方式 为 10100 ...

  3. OO第四次作业

    一.论述测试与正确性论证的差异 我认为论述测试代表从理论的角度来进行运行正确性的判断,而正确性测试则是从实践的角度来看待程序的正确性问题.两者之间有着明显的差异. 正确性论证是仅仅从代码的逻辑结构方面 ...

  4. java基础继承

    为什么用继承: 因为继承可以减少代码的冗余,提高维护性,为了从根本上解决存在的问题,就需要继承,就是将多个类当中的相同的地方提取到一个父类当中.父类更通用,子类更具体. 父类的继承格式 语法:publ ...

  5. 关于SpringCloud的微服务架构,提示502 Bad Gateway nginx/1.10.0

    1.具体环境是使用虚拟机,并在虚拟机上安装nginx对本机上的端口服务进行反向代理 我按照步骤一步步搭建完环境以后,第一次使用是可以正常使用的,当我关闭计算机后,再一次启动环境,就会发现输入网址之后网 ...

  6. VS2012及VS2013连接SQL2008提示 Could not load file or assembly 'Microsoft.SqlServer.Management.Sdk.Sfc'

    今天用同学的电脑,出现了这个错误.使用vs2012中的sqldatasoure控件,连接数据库.用的数据库是2008R2.已成功. 出现这样的错误. 解决办法: 安装以下三个组件: 安装顺序:SQLS ...

  7. echarts常见配置项总结,legend、toolbox、tooltip等

    1.饼状图指示线改变颜色:series.labelLine.lineStyle series : [ { name: '默认文字', type: 'pie',//类型饼状图 hoverAnimatio ...

  8. 神州数码BGP路由协议配置

    实验要求:了解BGP路由协议的配置方法及原理 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface l0 进入端口 ip add ...

  9. mysql 数据库

    show databases 显示库use databse 进入库(databse为库名)show tables 显示表create table a select * from b where 0=1 ...

  10. 安卓开发学习之Menu

    安卓开发中菜单是一个很重要的组件,从安卓开发文档(http://wear.techbrood.com/guide/index.html)中可以看到,安卓UI设计中的Menu主要分为: A.Option ...