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

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. L364 Should Your Resume Be One Page or Two?

    Should Your Resume Be One Page or Two? Conventional wisdom suggests that you should keep it short: A ...

  2. Fasttext原理

    fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率.序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签.fastText 在 ...

  3. TCP学习总结(四)

    TCP连接管理 TCP运输连接有3个阶段, 即: 连接建立,数据传送和连接释放. 1. TCP的连接建立(3次握手) TCP连接的建立采用客户服务器方式.主动发起连接建立的应用进程叫做客户(clien ...

  4. 2019-04-25-day040-数据库的查询

    内容回顾 数据的增删改查 插入数据 insert into 表 values (值1,值2...) insert into 表(指定字段名1,字段名2) values (值1,值2...) 删除数据 ...

  5. Always an Integer 数论和字符串处理

    题意:判断一个整系数多项式除以一个常数结果是否一定是一个整数 大白p123例题.可以随机代入一些n的值,判断一下.不过只要代入1到k+1(k为多项式最高项的次数)即可.通过数学归纳法证明,先讨论k为0 ...

  6. JQuery图片自适应窗口轮播图(淡入淡出效果)

    <script>var w = $(window).width();//获取窗口宽度var h = $(window).height();//获取窗口高度 $(".box&quo ...

  7. javamail发邮件

    使用JavaMail发送一封简单邮件的步骤:(1)创建代表邮件服务器的网络连接信息的Session对象.(2)创建代表邮件内容的Message对象(3)创建Transport对象.连接服务器.发送Me ...

  8. ubuntu 16.04 编译安装 amule (开启GUI)

    安装依赖 $ -dev libgeoip-dev zlib1g-dev libupnp-dev libboost-all-dev libwxbase3.-dev libwxgtk3.-dev buil ...

  9. 《Spring实战》读书笔记——如何实现自动化装配

    加我微信公众号,一起夯实Java基础,向着诗和远方出发吧~ 如果所有的装配工作都交给Spring来自动完成,减少人工的干预,是不是就能减少依赖关系配置带来的麻烦呢?认真做自己的事儿吧,装配交给Spri ...

  10. 统计数字(关联容器map)

    题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统 ...