selenium自动化之验证码识别(pillow库)

这里主要使用的是pillow库和调用第三方的打码平台中的接口来实现的。主要思路是:1. 将验证码所在的整个页面截图;2. 从已截取的页面图片中再截取验证码图片(这里使用pillow库中的Image类);3. 调用第三方打码平台中的接口函数。以下是详细操作步骤。

  1. 安装pillow库
    这里cmd进入dos窗口,输入pip install Pillow安装失败,报错提示Failed building wheel for Pillow。同理在pycharm中安装也报同样的错误。
    selenium自动化之验证码识别(pillow库)
    解决办法:从pillow官网上下载对应的版本,这里python装的是64位的3.5版本的.因此下载这个版本的Pillow-6.2.1-cp35-cp35m-win_amd64.whl,下载后将其放在python安装路径的Scripts文件夹下面。
    这里由于这个文件后缀是.whl,需要安装wheel。在dos中输入pip install wheel安装wheel。
    安装完后pip install 下载pillow所在路径/Pillow-6.2.1-cp35-cp35m-win_amd64.whl,例如我的是在D:\python35\Scripts,因此安装命令为:pip install D:\python35\Scripts\Pillow-6.2.1-cp35-cp35m-win_amd64.whl
    然而这样还是报如下错。百度了一下说这种错是版本不匹配
    selenium自动化之验证码识别(pillow库)进入python中,输入import pip 和 print (pip.pep425tags.get_supported()),可以查看本机python可以匹配哪些文件。
    selenium自动化之验证码识别(pillow库)可以看到第个是cp35,none,win_and64。而我们下载的是selenium自动化之验证码识别(pillow库)
    因此需要修改文件名,将中间的cp35m替换成none
    selenium自动化之验证码识别(pillow库)然后在执行命令pip install D:\python35\Scripts\Pillow-6.2.1-cp35-cp35m-win_amd64.whl
    selenium自动化之验证码识别(pillow库)2. 网上找一个第三方打码平台(随便找一家都可以),此处用的是超级鹰平台(http://www.chaojiying.com)。介绍一下怎么使用:
    (1)打开网站,点击开发者文档,选择语言,此处用python做自动化,所以选择python。
    selenium自动化之验证码识别(pillow库)
    点击这里下载,下载python源码
    selenium自动化之验证码识别(pillow库)
    解压后有个.py文件和用来测试的图片。
    selenium自动化之验证码识别(pillow库)
    大家可以先打开这个.py文件测试一下,在测试之前得先去该网站注册一***册完后去用户中心—软件ID—生成一个软件ID.
    selenium自动化之验证码识别(pillow库)
    记下这个软件ID,在测试.py文件中需要用到。
    selenium自动化之验证码识别(pillow库)
    在价格体系页面可以查询到验证码类型,到时候自己的验证是什么类型就填入响应的验证码类型。
    selenium自动化之验证码识别(pillow库)
    之前我准备完这些就去测试了一下,结果报错,提示没有题分。这里还得去关注一下他们的公众号,会送1000题分。(大家也可以找其他验证码平台,不知道其他验证码平台是否也这么麻烦)
    selenium自动化之验证码识别(pillow库)
    准备完之后终于可以测试成功了。
    selenium自动化之验证码识别(pillow库)
    selenium自动化之验证码识别(pillow库)
    3 验证码识别

(1)将整个页面截图
driver.save_screenshot(‘login.png’)
(2)截取验证码图片
2.1 先定位到验证码图片
yzm_ele = driver.find_element_by_xpath(’//form[@name=“fm2”]/div/img’)
2.2 获取验证码位置(x,y)坐标
loc = yzm_ele.location
2.3 获取验证码左边界(即x坐标),这里需注意查看电脑设置中的缩放率,如果不为100%,都需要乘上对应的比例,我这是125%,所以是乘1.25
selenium自动化之验证码识别(pillow库)
left = loc[‘x’]*1.25
2.4 获取验证码上边界(即y坐标)
top = loc[‘y’]*1.25
2.5 获取验证码图片大小(高和宽)
size = yzm_ele.size
2.6 获取验证码右边界
right = (loc[‘x’] + size[‘width’])*1.25
2.7 获取验证码下边界
button = (loc[‘y’] + size[‘height’])*1.25
2.8 使用pillow库截取login.png图片中的验证码图片(导入pillow模块:from PIL import Image),先打开之前截取的整个页面图片,注意位置顺序必须按照如下顺序(left, top, right, button)
login_img = Image.open(‘login.png’)
loction_yzm = (left, top, right, button)
yzm_pic = login_img.crop(loction_yzm)
yzm_pic.save(‘yzm.png’)
(3)调用超级鹰(chaojiying.py)中的函数识别验证码,记得要把这个模块导入到你自己代码中。
chaojiying = Chaojiying_Client(‘你自己注册的用户名’, ‘注册的密码’, ‘生成的软件ID’)
im = open(‘yzm.png’, ‘rb’).read()
#1004是验证码类型,看自己的验证码类型是什么,填入对应的类型
yzm_dic = chaojiying.PostPic(im, 1004)
#验证码内容在pic_str字段中
yzm_context = yzm_dic[‘pic_str’]

  1. 总结
    以上是自己学习过程中整理的笔记,分享给大家,希望能帮助大家解决遇到的问题。如有问题,可随时交流。