验证码识别--封装版

简介: 验证码识别--封装版

这里是清安,前面我们说过了数字英文的验证码识别操作,本章我们对其进行完善一下,结合selenium来实际操作操作。

import os

import time



defcoding_path(path):

   Base_Path = os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + '/..')

   Base_image = os.path.join(Base_Path + r'\PIC', path)

   return Base_image



deftime_():

   # %Y_%m_%d_%H_%M_%S

   file_name = time.strftime("%Y_%m_%d_%H_%M") + ".png"

   return file_name

首先先来写一个时间戳,你没看错,我想用时间戳来保存截图。至于coding_path就是一个相对路径,读取文件位置的一个函数。里面Base_Path是获取相对路径,Base_image是用的路径拼接的方式存放截图图片的。接下来就是正文了

classBrouse:


       def__init__(self):

           self.fox = webdriver.Firefox()


       defsave_image(self):

           """
           截图
           :return:
           """

          self.fox.save_screenshot(coding_path(time_()))


       deflocation_(self, loc):

           """
           :param loc:
           :return:获取图片位置
           """

           location = loc.location

           return location


       deflocation_size(self, loc):

           """
           :param loc:
           :return:获取图片大小
           """

           location_size = loc.size

           return location_size

这里我写的是类,里面写了各种方法。因为是结合selenium来写的,所以,这里我需要初始化驱动。至于为什么是火狐,这里我没做多的判断,各位自行更改成喜欢的就好。里面我写了一个selenium截图的方法、获取图片位置的方法、以及获取图片大小的方法。并将后两者的值全部返回,至于为什么返回,后面用的到。一下往下看。

   defimage_size(self, image):

           """截图验证码大小,根据实际修改"""

           rangle = (int(self.location_(image)['x'] - 5), int(self.location_(image)['y'] - 5),

                     int(self.location_(image)['x'] + self.location_size(image)['width'] + 11),

                     int(self.location_(image)['y'] + self.location_size(image)['height'] + 7))

           return rangle


       defcrop_image(self):

           """
           :return: 识别截图验证码
           """

           ocr = DdddOcr()

           file_image = open(coding_path(time_()), 'rb')

           result = ocr.classification(file_image.read())

           return result


同样的,这两个方法我是写在了类中的,只是分开来写了。截取验证码这一块,根据不同的电脑尺寸来,以及现实所设置布局。所以这里需要自己做一部分调整。另外,此处也可以采用*一定的比例来进行截取,例如self.location_(image)['x'] * 1.25。我们需要得到截取后的验证码图片,所以,我们这里也需要返回一个值。接下来就是识别验证码了,上一篇讲过,但是这里的方法需要在后续才能展现用处,往下看。同样用的是二进制读取。并将读取的值进行返回。

   defeles_crop_image(self, ele, num):

           """
           元素组截图定位
           :param ele:
           :param num:
           :return:
           """

           pic = self.fox.find_elements_by_xpath(ele)[num]

           sleep(1)

           # 保存截图,调用时间戳

           self.save_image()

           # 获取位置

           self.location_(pic)

           # 获取大小

           self.location_size(pic)

           # 确定所需要的图片大小

           self.image_size(pic)

           # 打开之前截图图片

           image = Image.open(coding_path(time_()))

           # 开始裁剪

           image1 = image.crop(self.image_size(pic))

           # 保存裁剪后的截图

           image1.save(coding_path(time_()))

           # 图片内容

           number = self.crop_image()

           while1:

               if len(number) < 3:

                   number = self.crop_image()

                   return number

               break

           return number


这里我们就是用到了上述的识别验证码了。但是在这之前,需要怼图片进行一些处理,也就是上面写到了的裁剪,裁剪出属于验证码的那一部分。上述的注释写了哦,需要一步步来最后得到完整的验证码图片,并对它进行识别,返回识别的值。

   defFox_test(self):

           self.fox.get('https://d2.shopxo.vip/admin.php?s=admin/logininfo.html')

           self.fox.find_element_by_xpath("//input[@name='accounts']").send_keys('admin')

           self.fox.find_element_by_xpath("//input[@name='pwd']").send_keys('shopxo')

           self.fox.find_element_by_xpath("//input[@name='verify']").send_keys(

               self.eles_crop_image("//span[@class='am-input-group-btn']", 1))

           self.fox.find_element_by_xpath("//*[text()='登录']").click()

           self.fox.close()



if __name__ == '__main__':

   Brouse().Fox_test()


此处就不用多说了吧,selenium基础,打开网址,定位元素,再加上调用方法传值,输入验证码,最后完成登录。这里只写了元素组的方法,全部代码可参考:https://gitee.com/qinganan/OCR.git,在pro_pic_orc文件中。此外,如果还有更好的方法,可以私信我,一起探讨。

目录
相关文章
|
4月前
|
JSON 文字识别 数据格式
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
|
5月前
|
JavaScript 前端开发 Java
信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ&插件项目
信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ&插件项目
|
数据采集 算法 开发者
如何使用Python爬虫处理多种类型的滑动验证码
如何使用Python爬虫处理多种类型的滑动验证码
|
6月前
|
数据可视化 数据挖掘 物联网
API接口:原理、设计与应用
随着互联网技术的发展,应用程序之间的交互变得越来越频繁。API(应用程序编程接口)作为不同应用程序之间的桥梁,发挥着越来越重要的作用。本文将详细介绍API接口的原理、设计与应用,并通过部分代码示例帮助读者更好地理解。
|
前端开发
前端学习笔记202306学习笔记第三十八天-封装检测数据类型得方法2
前端学习笔记202306学习笔记第三十八天-封装检测数据类型得方法2
59 0
前端学习笔记202306学习笔记第三十八天-封装检测数据类型得方法2
|
机器学习/深度学习 人工智能 文字识别
从图片提取文字的终极解决方法 ——【通用文字识别 API】
通用文字识别技术,也称为OCR(Optical Character Recognition,光学字符识别),就是一种将图像或扫描件中的文字识别出来并转化为可编辑、可搜索的数字化文本的技术。
770 1
从图片提取文字的终极解决方法 ——【通用文字识别 API】
|
JavaScript 开发工具 开发者
(简易)测试数据构造平台:33 - 正文开始-工具使用功能
(简易)测试数据构造平台:33 - 正文开始-工具使用功能
|
API
火山中文编程 -- 封装信息框API
火山中文编程 -- 封装信息框API
167 0
火山中文编程 -- 封装信息框API
|
jenkins 测试技术 持续交付
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
上一篇已经给大家都介绍过了流程类接口关联,但是由于博客的登录机制改变,所以没有办法给小伙伴们实战演练一下,那么这篇就按照上一篇计划的用jenkins来给小伙伴们演示一下流程类接口的封装和调用,其实很简单,就是用上一篇和前边这篇传送门的代码稍稍修改即可。不知道你自己练习了么,如果练习了,可以看看和我有什么不同,没练习的看看自己思路和我有啥不一样。好了废话少说进入主题
201 0
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
|
JSON 前端开发 测试技术
手把手带你设计接口自动化测试用例(一):提取接口信息并分析
手把手带你设计接口自动化测试用例(一):提取接口信息并分析
556 0
手把手带你设计接口自动化测试用例(一):提取接口信息并分析