selenium--验证码识别,一文教会你回答面试官

本文涉及的产品
票证核验,票证核验 50次/账号
OCR统一识别,每月200次
文档理解,结构化解析 100页
简介: selenium--验证码识别,一文教会你回答面试官

这里是清安,相信大家在日常划水,培训,工作中都遇到这样的问题,验证码怎么处理?也有一些面试官会这么问。这里清安大致的说说,最常见的处理方式。1、万能验证码:所谓的万能验证码也就是找开发固定一个验证码,比如abcd,12cd这种,每次打开固定不变,永远都是同一个验证码。或者说是,不管你输入什么验证码都是正确的,代码不对验证码进行校验。2、注销验证码:这里呢就是直接找开发,经过协商,开发把验证码这一块代码注释掉。这里跟上述所说的其实类似。3、cookie登录:了解过接口的都知道,登录账号密码过程中,其实是一次发起请求的过程,有发起请求对应的会有返回响应。那么cookie就在这里面了。我们可以通过循环里面的内容,绕过登录这个环节,直接进入登录后的界面。后续会出文。4、最后一种,那当然就是本篇要介绍的,纯技术搞定。图像识别。本文介绍两种。第一种pytesseract+PIL,第二种就是一个库,我也是最近才发现的:ddddocr。我理解的就是懂得都懂orc。玩笑开完,先来简单看看例子。


pytesseract+PIL这种需要用到工具Tesseract-OCR,下载地址:https://digi.bib.uni-mannheim.de/tesseract/还需要配置环境变量:

      第一,在系统变量path中添加:E:\picture_dev\Tesseract-OCR,这里是你安装的路径,需要根据自己的实际安装路径更改。第二:系统变量path新建一个环境,并且将你下载解压的Tesseract-OCR路径写进去,如下图这两下载完了,接下来就是:

pip install Pillow

pip install pytesseract

下载工具对应所需要的包啦。下载完后试试如下两个命令:接下来我们可以开始写代码了:

# -->>>清安<<<---

from PIL import Image

import pytesseract


# 打开图片

image = Image.open(r'PIC/3.jpg')

# 灰度处理

image1 = image.convert('L')

# 识别图片,lang是对应的字体

text = pytesseract.image_to_string(image,lang='eng')

# 打印识别内容

print(text)

好了,这里是个简单的例子。验证码可以自己百度上找。打开图片这里的路径根据自己的实际情况更改。lang='eng'这里,也可以不要,这里的意思就是识别中文还是英文,如果是中文那么需要另外下来语言包。默认英文。这里,有很多朋友跑起来之后会报错,提示你什么什么path没有发现或者不对的。改一下配置就好。上述代码中按住ctrl鼠标点击image_to_string方法,会进入到pytesseract.py文件,一直上滑或者CTRL+F搜索关键字。

将此处注释的改成你的Tesseract-OCR文件内的tesseract.exe路径即可,然后重启电脑注意:这样的方法可以识别验证码码,但是准确率太低了,甚至有很多不能识别。所以介绍到此结束。

ddddocr
这个包就比上一个方法强很多了。识别率也是比较不错的。但是呢,作者比较的流氓。大佬很强但是也很流氓。至于为什么这么说,各位去试试就知道了。


pip install ddddocr

好了玩笑到这里。大家不喜欢作者的库每次打开后都有一些介绍信息的可以去源代码删了,下面会介绍。


from
ddddocr import DdddOcr


# 实例化方法

ocr = DdddOcr()

# 打开图片

file = open(r'./PIC/7.png','rb')

# 读取图片

img = file.read()

# 识别图片

result = ocr.classification(img)

# 打印内容

print(result)

上述例子,验证码自己备好哦。上述简单的例子就能完成验证码图片识别了。可以自己去试试。DdddOcr是里面的一个类方法。里面还有一些其他的功能各位大佬自己去试试吧。本文只介绍图片识别哦。上面比较的好理解吧。那么我们进入实战。

"""
体验管理员: admin
密码: shopxo
https://d2.shopxo.vip/admin.php?s=admin/logininfo.html
"""

是一个后台管理的地址,请不要乱删改里面的内容,作者开源不易。我们先用最简单的脚本来写一下:

# -->>>清安<<<---

from PIL import Image

from ddddocr import DdddOcr

from selenium import webdriver

from time import sleep

"""
体验管理员: admin
密码: shopxo
https://d2.shopxo.vip/admin.php?s=admin/logininfo.html
"""


fox = webdriver.Firefox()

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

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

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

pic = fox.find_elements_by_xpath("//span[@class='am-input-group-btn']")[1]

sleep(2)

# 保存截图

fox.save_screenshot('./PIC/6.png')

# 获取位置

location = pic.location

print(location)

# 获取大小

pic_size = pic.size

print(pic_size)

# 确定所需要的图片大小

rangle = (int(location['x']-5), int(location['y']-5), int(location['x'] + pic_size['width']+11),

       int(location['y'] + pic_size['height']+7))

# 打开之前截图图片

image = Image.open('./PIC/6.png')

# 开始裁剪

image1 = image.crop(rangle)

# 保存裁剪后的截图

image1.save('./PIC/7.png')

# 实例化类方法

ocr = DdddOcr()

# 打开图片,二进制形式

file = open(r'./PIC/7.png','rb')

# 读取图片

img = file.read()

# 识别图片验证码

result = ocr.classification(img)

print(result)

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

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

很多人看了这里是不是麻了,哈哈哈,我自己写的也看麻了。后续会优化在框架中体现。亦或者出一篇优化的文。基础脚本麻,我们简单说说其中重要的,selenium基础就不用多说了。最主要的是截图验证码那部分,也就是代码中的rangle变量。这里需要根据实际情况进行调整,把整个验证码框截取下来,也就是在原来的坐标上,进行加减乘除。代码中有x+y的一部分代码,这里是为什么呢,是我们获取到的一个验证码是根据坐标轴来的,也就是说,这里的x+y实则取得是长宽的一个范围。我想截取一个长方形,我需要知道长跟宽吧。那么如何知道了,那就是此处的取值了。就好歹我从左下角开始取值,我想得到一个验证码这样长方形的图,那么终点只能是右上角。注意:这里验证码识别只是举例了,实际情况还是需要根据项目来才行, 毕竟这个库识别率虽然OK,但是难免也会有出错的时候。所以,在用技术自动登录的过程中,还需要做很多的判断来避免错误让它自己登录自己判断的更流畅。

目录
相关文章
|
8月前
|
人工智能 开发工具 Python
2024年利用Python突破验证码限制,2024年最新Python高级开发工程师面试题
2024年利用Python突破验证码限制,2024年最新Python高级开发工程师面试题
2024年利用Python突破验证码限制,2024年最新Python高级开发工程师面试题
|
8月前
|
机器学习/深度学习 Java 数据挖掘
selenium的配置与基本使用(1),2024年最新网易Python面试必问
selenium的配置与基本使用(1),2024年最新网易Python面试必问
|
Web App开发 JavaScript 测试技术
Selenium2+python自动化39-关于面试的题
前言 最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下, 回答不妥的地方欢迎各位高手拍砖指点。   一、selenium中如何判断元素是否存在? 首先selenium里面是没有这个方法的,判断元素存在需要自己写一个方法了。
2187 0
|
3月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
191 5
|
1月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
118 31
Selenium IDE:Web自动化测试的得力助手
|
1月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
213 17
Selenium:强大的 Web 自动化测试工具
|
3月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
3月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
762 5
|
3月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。

热门文章

最新文章