#-*- coding:UTF-8 -*-
# 面试问题: 写自动化脚本的时候遇到验证码你这么处理
# 1: 验证码有的是前端生成的,有的是后台生成以后,返给前端的,
# 2: 让后台把验证码写成万能验证码,这样无论我们提交啥验证码都能通过,但是这个验证码想当于没有
# 3: 让前端把验证码注释掉,但是大部分开发不给注释,所以我们需要第三种方式
# 4: 自己通过第三方库区识别验证码,这样验证码的识别率差不多有90%,总有几个要失败的
# 首先我们需要去网站在登陆的时候讲验证码下载到本地,再通过第三方库区识别
# 导入 selenium 包,打开浏览器
from selenium import webdriver
# 导入休眠包
import time
# 导入base64 包
import base64
# 首先倒包 导入 PIL 下面的 IMAGE 用来打开图片
from PIL import Image
# 导入识别图片验证码的包
from pytesseract import *
import PIL.ImageOps
# 打开浏览器
driver = webdriver.Firefox()
# 设置窗口最大化
driver.maximize_window()
# 打开指定网页
driver.get("http://www.qiezzi.com/user/signup?return=http://www.qiezzi.com/")
# 设置休眠时间
time.sleep(5)
# 查找控件,获取下载验证码的URL
ing_down = driver.find_element_by_class_name("ing_down")
# 通过 属性获取url
img_url = ing_down.get_attribute("src")
print img_url
# 对字符串进行切换 1:获取图片的格式 2: 切换出base64,将其转化为一张图,保存下来
formats = "."+ img_url[11:15]
if formats == '.jpeg':
formats = ".jpg"
print formats
# 切换 base64 图片同时保存下来到本地
base64imaage = img_url.split(",")
# 通过下标去取第二个
base64_img = base64imaage[1]
print base64_img
# 将图片保存到本地
files = "qiezi"+formats
# 指定读写方式
filename = open(files,"wb")
# 写入内容
# 对base64 进行解码以及写入
imagedata = base64.b64decode(base64_img)
# 写入本地
filename.write(imagedata)
# 关流
filename.close()
# 开始识别验证码
def initTable(threshold=170):
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
return table
# 打开图片
im = Image.open(files)
# 指定图片的大小
# 对图片进行二值化处理
# 一张图片可以处理成两种颜色,就是黑色和白色处理的模式叫 L
# L = R * 299/1000 + G * 587/1000 + B * 114/1000
im = im.convert('L')
# 如果现在取识别,咱们这个图是识别不出来的,因为每一种类型的图片阈值是不一样的,默认情况下二值化的阈值是127
# 所以我们去从新设置模式,改变阈值
# 设置模式1 模式
binaryImage = im.point(initTable(), '1')
# 设置为 L模式 二值化模式
im1 = binaryImage.convert('L')
# 对图片进行校准
im2 = PIL.ImageOps.invert(im1)
# 校准完了以后设置为模式1
im3 = im2.convert('1')
# 继续设置为黑吧图像
im4 = im3.convert('L')
# 指定图片的大小
#将图片中字符裁剪保留 左 下 右 上 边距
box = (15,0,85,28)
# 设置图片的大小
region = im4.crop(box)
#将图片字符放大
out = region.resize((120,38))
# 讲图片识别出来
asd = pytesseract.image_to_string(out)
print asd
print (out.show())
# 关闭
driver.quit()
识别码用到二值化
最新推荐文章于 2022-07-29 21:34:45 发布