【爬虫】实验项目三:验证码处理与识别
目录
一、实验目的
二、实验预习提示
三、实验内容
实验要求
基本要求:
改进要求A:
改进要求B:
四、实验过程
基本要求
五、源码如下
六、资料
一、实验目的
部分网站可能会使用验证机制来阻止用户无效登录或者是验证用户不是用程序控制访问网站的,如 reCAPTCHA 系统。本次实验主要针对常见的验证机制:验证码进行分析和识别,这里可以使用传统和OCR技术或者基于神经网络的机器学习技术。
二、实验预习提示
1、为Python安装Selenium、PyQuery库,安装Chrome和对应ChromeDriver(见实验一)
2、为Python安装深度机器学习库和图像处理库:pytorch,python-opencv
3、为Python安装OCR库:Python第三方模块tesserocr安装 - 寒爵 - 博客园 (cnblogs.com)
注意:TESSDATA_PREFIX变量应该是包含tessdata子目录
三、实验内容
登录网站1:https://captcha7.scrape.center
登录网站2:https://captcha8.scrape.center
使用图像识别库或者训练过的神经网络模型对登录网站1的验证码进行识别,然后把识别结果用代码填入,然后再进行登录,用户名和密码都是:admin。
实验要求
基本要求:
使用一个合适的技术将登录网站1的验证码进行识别,并由代码自动登录。注意事项:所有信息必须由代码自动填入并且自动操作,无需人工填入任何信息或使用人工交互。
改进要求A:
在完成基本要求的基础上,
选项一:实现登录网站2的模拟登录,注意事项见基本要求;
选项二:实现对于带有验证登录方式(如验证码,滑动条,拼图,语序点击,空间推理,图文点击等)的常见网站。
改进要求B:
在完成基本要求的基础上,训练一个神经网络模型使得在给出测试集上准确率至少达到80%以上。框架代码:DeepLearningImageCaptcha-master.zip,测试集:dataset.zip
四、实验过程
基本要求
该实验可以从以下几个步骤执行
1. 打开游览器,打开对应网站
2. 获取用户名密码输入框并赋值
3. 获取验证码
4. 处理验证码
这里使用了ocr的升级版ddddocr , 为了提高识别验证码的精度,这里还用了正则表达式,替换掉验证码开头的符号(有时候会出现)
5. 获取验证码输入框并赋值
6. 获取登录按钮并点击登录
7. 登录成功与失败
如果登录成功就1s后关闭游览器,否则清空验证码输入框,获取心得验证码,继续登录,直到登录成功为止。
8. 控制台输出
总结:本实验前期利用 Tesserocr 识别验证码的过程并将其应用于实战案例中实现了模拟登录。为了提高 Tesserocr 的识别准确率,可以对验证码图像进行预处理去除一些干扰,识别准确率会大大提高;但最后还是转入它的升级版ddddocr。
五、源码如下
import re
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium import webdriver
import ddddocrDDDDOCR_DDDD_OCR = ddddocr.DdddOcr()# 验证码处理
def codeDispose(v_code):ocr = DDDDOCR_DDDD_OCRres = ocr.classification(v_code.screenshot_as_png)# 验证码前面非字母数字 用空格替换res = re.sub('[^A-Za-z0-9]', '', res)return resdef login():# 打开游览器driver = webdriver.Chrome()driver.get("https://captcha7.scrape.center/")# 获取用户名密码输入框并赋值driver.find_element(By.CSS_SELECTOR, '.username input').send_keys('admin')driver.find_element(By.CSS_SELECTOR, '.password input').send_keys('admin')def code():# 获取验证码v_code = driver.find_element(By.ID, value='captcha')v_code.click() # 刷新验证码print("未处理的验证码", v_code)v_code = codeDispose(v_code) # 处理验证码print("输入验证码:", v_code)# 获取验证码输入框并赋值driver.find_element(By.CSS_SELECTOR, '.captcha input').send_keys(v_code)time.sleep(1)# 获取登录按钮并点击driver.find_element(By.CSS_SELECTOR, '.login').click()try:WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//h2[contains(.,"登录成功")]')))time.sleep(1)# 登录成功自动关闭游览器driver.close()print("登录成功")except Exception as err:print(f"登录失败:{err}")# 清空输入框driver.find_element(By.CSS_SELECTOR, '.captcha input').clear()print('成功清空输入框')code() # 再次登录code()if __name__ == '__main__':login()
六、资料
1. 实验框架代码:
import tesserocr
from PIL import Image
import numpy as np
image = Image.open('code.png')
# 方式1
result = tesserocr.image_to_text(image)
print(result) # ‘PFRT.# 方式2
print(tesserocr.file_to_text('code.png')) # ‘PFRT.
# 转为数组
print(np.array(image).shape)
print(image.mode)
code.png 如下:
2. 免费GPU训练资源:
Google Colab
3. 实验小提示
也可以使用打码平台API的调用完成验证码识别。
恭喜你成功地学完了我的所有爬虫内容!希望你已经获得了有用的信息和技巧,并且能够将其应用到实践中。如果有任何问题或疑虑,请随时与我联系。祝你好运!
相关文章:

【爬虫】实验项目三:验证码处理与识别
目录 一、实验目的 二、实验预习提示 三、实验内容 实验要求 基本要求: 改进要求A: 改进要求B: 四、实验过程 基本要求 五、源码如下 六、资料 一、实验目的 部分网站可能会使用验证机制来阻止用户无效登录或者是验证用户不是用程…...

广东成人高考报名将于9月14日开始!
截图来自广东省教育考试院官网* 今年的广东成人高考正式报名时间终于确定了! 报名时间:2023年 9 月14—20日 准考证打印时间:考前一周左右 考试时间:2023年10月21—22日 录取时间:2023年12 月中上旬 报名条件: …...
pytorch中文文档学习笔记
先贴上链接 torch - PyTorch中文文档 首先我们需要安装拥有pytorch的环境 conda指令 虚拟环境的一些指令 查看所有虚拟环境 conda info -e 创建新的虚拟环境 conda create -n env_name python3.6 删除已有环境 conda env remove -n env_name 激活某个虚拟环境 activate env…...
element-ui全局导入与按需引入
全局引入 npm i element-ui -S 安装好depencencies里面可以看到安装的element-ui版本 然后 在 main.js 中写入以下内容: import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import App from ./App.vue;Vue.…...
go 地址 生成唯一索引v2 --chatGPT
问:golang 函数 getIndex(n,addr,Hlen,Tlen) 返回index。参数n为index的上限,addr为包含大小写字母数字的字符串,Hlen为截取addr头部的长度,Tlen为截取addr尾部的长度 gpt: 你可以编写一个函数来计算根据给定的参数 n、addr、Hlen 和 Tlen …...
JSON XML
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种常用的数据交换格式,用于在不同系统之间传输和存储数据。 JSON是一种轻量级的数据交换格式,它使用易于理解的键值对的形式表示数…...
2023年MySQL实战核心技术第四篇
七 . 吃透索引:...

cmake编译(qtcreator)mingw下使用的osg3.6.5
官网下载osg3.6.5源码,先不使用依赖库,直接进行编译 如果generate后报错,显示找不到boost必须库,则手动增加路径。然后先在命令行中使用mingw32-make,如果显示不存在,则需要去环境变量里配置一下这个工具的…...

Python钢筋混凝土结构计算.pdf-混凝土强度设计值
计算原理: 需要注意的是,根据不同的规范和设计要求,上述公式可能会有所差异。因此,在进行混凝土强度设计值的计算时,请参考相应的规范和设计手册,以确保计算结果的准确性和合规性。 代码实现: …...

elasticsearch的索引库操作
索引库就类似数据库表,mapping映射就类似表的结构。我们要向es中存储数据,必须先创建“库”和“表”。 mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型,常见的…...

把握市场潮流,溯源一流品质:在抖in新风潮 国货品牌驶过万重山
好原料、好设计、好品质、好服务……这个2023,“国货”二字再度成为服饰行业的发展关键词。以消费热潮为翼,越来越多代表性品类、头部品牌展现出独特价值,迎风而上,在抖音电商掀起一轮轮生意风潮。 一个设问是:在抖音…...
【网络教程】Python如何优雅的分割URL
文章目录 URL分割方法是一种用于解析URL字符串的方法,它可以将URL分解成不同的组成部分,如协议、域名、端口、路径等。在Python中,我们可以使用urllib.parse模块中的urlsplit方法来实现URL分割。 使用方法 下面是一个简单的示例代码,演示了如何使用urlsplit方法解析URL字符…...

1998-2014年工业企业数据库和绿色专利匹配
1998-2014年工业企业数据库绿色专利匹配 1、时间:1998-2014年 2、样本量:470万 3、来源:工业企业数据库、国家知识产权局、WIPO 4、指标: 企业匹配唯一标识码、组织机构代码、企业名称、年份、法定代表人、法定代表人职务、行…...

Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)
在本教程中,我们将使用Python和Mirai来开发一个QQ机器人,本文提供了三个教学视频,包教包会,本文也很贴心贴了代码和相关文件。话不多说,直接开始教学。 目录 一、安装配置MIrai 图片验证码报错: 二、机器…...
算法笔记:堆
【如无特别说明,皆为最小二叉堆】 1 介绍 2 特性 结构性:符合完全二叉树的结构有序性:满足父节点小于子节点(最小化堆)或父节点大于子节点(最大化堆) 3 二叉堆的存储 顺序存储 二叉堆的有序…...

vue3 判断包含某个字符
<img v-if"node.level 1 && checkIfIncludeSubStr(node.label, 人口)"src"/assets/images/icon-convention-01.png" width"16"class"inlineBlock Vmiddle" style"margin-right: 8px;"/>const data reactive…...
MySQL的故事——查询性能优化
查询性能优化 文章目录 查询性能优化一、查询优化器的提示(hint)二、优化特定类型的查询 一、查询优化器的提示(hint) HIGH_PRIORITY和LOW_PRIORITY 这个提示告诉MySQL,当多个语句同时访问某一个表时,哪些语句的优先级相对高些,哪些相对低些…...

在外SSH远程连接macOS服务器【cpolar内网穿透】
文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …...

Nosql数据库服务之redis
Nosql数据库服务之redis 一图详解DB的分支产品 Nosql数据库介绍 是一种非关系型数据库服务,它能解决常规数据库的并发能力,比如传统的数据库的IO与性能的瓶颈,同样它是关系型数据库的一个补充,有着比较好的高效率与高性能。 专…...

当AI遇到IoT:开启智能生活的无限可能
文章目录 1. AI和IoT的融合1.1 什么是人工智能(AI)?1.2 什么是物联网(IoT)?1.3 AI和IoT的融合 2. 智能家居2.1 智能家居安全2.2 智能家居自动化 3. 医疗保健3.1 远程监护3.2 个性化医疗 4. 智能交通4.1 交通…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...

Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用 Linux 内核内存管理是构成整个内核性能和系统稳定性的基础,但这一子系统结构复杂,常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题,需要一套工具化、…...