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

news2024/11/28 22:53:26

相信大家在日常划水,培训,工作中都遇到这样的问题,验证码怎么处理?也有一些面试官会这么问。

这里大致的说说,最常见的处理方式。

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,但是难免也会有出错的时候。所以,在用技术自动登录的过程中,还需要做很多的判断来避免错误让它自己登录自己判断的更流畅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/344960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jenkins下配置maven

1. 先在jenkins服务器上安装maven 下载-解压-重命名-启动 [rootVM-0-12-centos local]# wget https://mirrors.aliyun.com/apache/maven/maven-3/3.9.0/binaries/apache-maven-3.9.0-bin.tar.gz [rootVM-0-12-centos local]# tar xf apache-maven-3.9.0-bin.tar.gz [rootVM-0…

嵌入式ARM设计编程(一) 简单数据搬移

文章和代码已归档至【Github仓库&#xff1a;hardware-tutorial】&#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 熟悉实验开发环境&#xff0c;掌握简单ARM汇编指令的使用方法。 二、实验环境 硬件&#xff1a;PC机 软件&am…

【招聘】永善县社会科学界联合会招办公室文秘人员2名

【招聘】永善县社会科学界联合会招办公室文秘人员2名 因工作需要&#xff0c;根据《永善县人力资源和社会保障局关于做好2021年公益性岗位开发管理的通知》(永人社发〔2020〕34号)文件要求&#xff0c;现面向社会公开招聘公益性岗位工作人员&#xff0c;现通告如下&#xff1a…

锐捷(十五)mpls vxn跨域optionc场景

一 实验拓扑二 实验需求ce1和ce2为两个分公司&#xff0c;要求两个分公司之间用mpls vxn 进行通信&#xff0c;组网方式是optionc。三 实验分析optionc在转发平面上有点难理解&#xff0c;有一些关键点需要注意&#xff0c;大家点击链接可以参考我上篇发过的一个文章&#xff1…

前端md5加盐加密

为什么需要加密 前端在进行用户登录时&#xff0c;密码的传输如果使用明文&#xff0c;在报文被拦截之后即可直接获取传输的数据&#xff0c;明文密码被拦截会十分危险&#xff0c;因此在传输密码前时常对密码进行加密。 MD5 MD5的作用是让大容量信息在用数字签名软件签署私…

植物大战 List——C++

这里写目录标题vector和stirng的细节对于stringlist的使用list的迭代器反向迭代器构造函数关于list::sort的排序uniquelist的底层模拟实现结点类的实现迭代器模拟实现list实现插入的实现迭代器失效inserterase析构函数拷贝构造赋值构造函数vector和stirng的细节 复习vector的深…

全网详细总结com.alibaba.fastjson.JSONException: syntax error, position at xxx常见错误方式

文章目录1. 复现问题2. 分析问题3. 解决问题4. 该错误的其他解决方法5. 重要补充1. 复现问题 今天在JSONObject.parse(json)这个方法时&#xff0c;却报出如下错误&#xff1a; com.alibaba.fastjson.JSONException: syntax error, position at 0, name usernameat com.aliba…

Web自动化测试——Junit5篇

文章目录一、相关依赖注入二、注解调用三、断言 Assert四、规定用例执行顺序五、高效参数化1&#xff09;单参数2&#xff09;多参数3&#xff09;文件获取参数4&#xff09;方法获取数据&#xff08;动态参数&#xff09;六、测试套件整活Junit 是一个面向 Java 语言的单元测试…

网络安全-协议爆破-xhydra

网络安全-协议爆破-xhydra 啥叫爆破呢&#xff0c;当你忘记密码了&#xff0c;一个一个去猜想的时候&#xff0c;这个东东就叫暴力破解 简称爆破&#xff0c;而且用程序的组合去一个一个试&#xff0c;时间问题&#xff0c;总有尝试到的那天 爆破前需求 也就是说满足了什么…

数据库测试的认知和分类

数据库测试的认知和分类 目录&#xff1a;导读 系统测试 集成测试 单元测试 功能测试 数据库性能 性能优化分4部分 安全测试 现在的软件系统&#xff0c;尤其是业务应用系统&#xff0c;后台都连接着一个数据库。数据库中存储了大量的数据&#xff0c;数据库的设计是否…

完整爬虫学习笔记(第一章)

文章目录前言:fu:. 爬虫概述:hotdog:原理解剖:one: 服务器渲染:two: 前端JS渲染:fire: 第一个爬虫程序案例总结前言 最近正在学习Python网络爬虫的相关知识&#xff0c;鉴于本人Python水平有限 , 对Python并无太深的理解&#xff0c;所以此文章的主要目的在于抛砖引玉&#xf…

C语言(ANSI C类型限定符)

目录 1.const(恒常性) 2.volatile 3.restrict 1.const(恒常性) 如果我们想处理一个基本类型时&#xff0c;我们可以选择传递类型变量值或类型变量的地址。但有的时候我们传入地址但不想让其修改地址上面存储的值&#xff0c;那么就可以用到const。 这个时候const的作用就到了。…

Ansys Speos | 基于 Workbench 和 Speos 的准直全反射透镜优化设计案例

概述 基于Ansys Speos软件&#xff0c;可以准确建立光学系统模型并进行成像效果仿真。在使用Speos进行光学系统设计过程中&#xff0c;当完成初始光学系统建模后&#xff0c;还需要进一步结合仿真结果&#xff0c;调整出满足设计要求的系统参数&#xff0c;如果采用手动调整参…

香农 | 流行潮(bandwagon)

【编者按&#xff1a;面对当前的Chatgpt热潮&#xff0c;该如何看待呢&#xff1f;英语当中有种说法叫 jump on the bandwagon&#xff0c;意为跟风随大流。60多年前&#xff0c;当信息论的发展进入越来越多的领域&#xff0c;一向低调的香农在《流行潮》&#xff08;The Bandw…

Linux 游戏性能谁的 更优秀X.Org还是Wayland!

导读X.Org 和 Wayland 是目前 Linux 平台上的两大主流显示服务器&#xff0c;那么两者在 Linux 游戏性能上谁更优秀呢&#xff1f;国外科技媒体 Phoronix 在 Ubuntu 22.10 上对其进行了多款游戏的实测。评测在运行 GNOME 43.1 的 Ubuntu 22.10 上进行测试&#xff0c;在安装英伟…

基于QT5.14.2的MQTT通信

一、概述 默认的Qt环境是不能使用MQTT的&#xff0c;但Qt官方提供了基于MQTT的封装&#xff0c;需要通过源码进行编译。 可以在下面的链接中获取到&#xff1a; https://github.com/qt/qtmqtt 在dev分支中可以选择MQTT版本&#xff0c;选择最新的下载到本地。注意一定要选择对…

Video Speed Controller谷歌视频加速插件——16倍速

文章目录前言最简单的版本一、如果是简单的话 可以Microsoft Edge使用二、简单的版本 火狐的话使用Global Speed插件三、由于视频受限以上的方法行不通 还是谷歌好用前言 主要是网课刷的时候 太慢所以找到了刷视频的方法 由于前几个的权限受限制 所以还是选用了谷歌浏览器的 V…

Ambire Wallet 2023 年路线图

在一个充满活力的建设者空间&#xff0c;但在一个努力的熊市中&#xff0c;作为加密技术创新者&#xff0c;我们必须保持适应&#xff0c;同时继续通过做好工作来领导&#xff1a;建立愿景。 已经建设了很多&#xff0c;也还有很多要做的&#xff1a;Ambire 发布了今年的雷达图…

炎症回路和肠道微生物

✦ ✦ ✦ 炎症&#xff1a;就是平时人们所说的“发炎”&#xff0c;是机体对于刺激的一种防御反应。炎症&#xff0c;可以是感染引起的感染性炎症&#xff0c;也可以不是由于感染引起的非感染性炎症。 炎症在在各种症状中起重要作用&#xff0c;如脑雾、焦虑和抑郁、腹胀、各种…

数据工程师需要具备哪些技能?

成为数据工程师需要具备哪些技能&#xff1f;数据工程工作存在于各个行业&#xff0c;在银行业、医疗保健业、大型科技企业、初创企业和其他行业找到工作机会。许多职位描述要求数据工程师、拥有数学或工程学位&#xff0c;但如果有合适的经验学位往往没那么重要。 大数据开发…