WebDriver中自动识别验证码--Python实现

1:在Python自动化测试过程中,进行登陆的时候,一般都是要进行验证的校验的,自己也在百度一下,现在有2种方法:
1)找开发去掉验证码或者使用万能验证码
2)使用OCR自动识别(识别率不是很高,但简单的验证还是可以的)

2:使用OCR自动识别的思路是:(参考博客 http://www.cnblogs.com/landhu/p/4968577.html )
先将截取含有验证码的图片>>>>定位到验证码的坐标>>>>然后从坐标从截图中通过pytesseract进行截取验证码

#导入os库
import os
#用于改变当前工作目录到指定的路径
os.chdir('D:\Software\Python27\lib\site-packages\pytesseract')
#导入PIL 库做图像处理
from PIL import Image
#导入pytesseract库,pytesseract是用于验证码、字符识别(依赖环境是PIL和tesseract-ocr)
import pytesseract
#re 模块使 Python 语言拥有全部的正则表达式功能
import re
#导入webdriver模块
from selenium import webdriver
#导入等待时间模块
from time import sleep
#打开浏览器
driver = webdriver.Firefox()

#获取要登录的网址
driver.get("http://172.16.199.236:6600/bms/login.html")

#将页面窗口最大化
driver.maximize_window()

#等待5秒
sleep(5)
#截取当前网页,该网页有我们需要的验证码
driver.save_screenshot('d://aa.png')

# 定位验证码
imgelement = driver.find_element_by_xpath('//*[@id=\'codeValidateImg\']')

# 获取验证码x,y轴坐标
location = imgelement.location

# 获取验证码的长宽
size = imgelement.size

# 需要截取的位置坐标
rangle = (int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height']))

# 打开截图
i = Image.open("d://aa.png")

# 使用Image的crop函数,从截图中再次截取我们需要的区域
bb = i.crop(rangle)
bb.save("d://bb.jpg","JPEG")
#打开截图
cc = Image.open('d://bb.jpg')

#使用image_to_string识别验证码
text = pytesseract.image_to_string(cc).strip()

#输出从截图获取到的字符串
print text

#用户Python的正则表达式将文本的验证中进行纯数字的提取
text1 = re.sub("\D","",text)

print text1

遇到问题:
1:保存有验证码区域的图片时报错:

1194110-20170719214601630-1165989801.png

解决方案:我这里出现这个问题的原因是:我用pillow来代替PIL,产生的错误,重新从网上下载win7的64位的PIL进行安装,再次运行,解决(网上说这2兄弟没啥区别,但是为啥会出现这情况,我也还没搞明白)。

PIL下载地址参考博客:https://www.waitalone.cn/python-php-ocr.html

2:解决了上个问题1,之后又提示下图的错误:

1194110-20170719220021833-1803385931.png

解决方案:改变当前工作目录到指定的路径,参考博客:http://www.jianshu.com/p/122f42624776

import os
os.chdir('D:\Software\Python27\lib\site-packages\pytesseract')   #路径:pytesseract的路径

3:image_to_string识别验证码有误,错误提示如下图,

1194110-20170719215207365-584169511.png

解决方案:下载图像识别类库tesseract-ocr工具进行安装,傻瓜式安装即可,安装好之后,还要将pytesseract.py代码中修改tesseract_cmd的路径,然后重新运行即可成功

#tesseract_cmd = 'tesseract'
tesseract_cmd = 'D:\Software\Tesseract-OCR/tesseract.exe'

4:运行以上的代码,可以将简单的验证提取出来,但是有时候会有小数点,通过re.sub()函数正则表达式进行过滤,参考博客:http://www.cnblogs.com/yyyg/p/5498803.html

import re
text1 = re.sub("\D","",text)
print text1

转载于:https://www.cnblogs.com/gz-0325/p/7207671.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值