Selenium+dddocr 轻松解决Web自动化验证码识别!

2023-11-01

大家好,我是小濠,今天给大家推荐一款验证码识别神器:dddocr

1、介绍

dddocr是一个基于深度学习的OCR(Optical Character Recognition,光学字符识别)库,用于识别图片中的文字。它可以识别各种类型的文字,包括印刷体、手写体、表格、条形码等。dddocr库使用了深度卷积神经网络(CNN)和循环神经网络(RNN)等先进的模型,具有较高的准确性和稳定性。

使用dddocr库可以方便地进行文字识别的开发和应用。它提供了简单易用的API接口,可以接收图片作为输入,返回识别结果。用户只需要将待识别的图片传入dddocr库的API接口,即可获取识别出的文字信息。同时,dddocr库还支持批量处理多张图片,提供了多线程和分布式处理的功能,可以提高识别速度和效率。

dddocr库可以广泛应用于各种场景,例如文档数字化、图像检索、自动化办公等。它可以帮助用户快速准确地提取图片中的文字信息,方便进行后续的处理和分析。在实际应用中,dddocr库已经被广泛应用于金融、医疗、物流等领域,取得了良好的效果。

2、基本使用

安装:pip install dddocr

利用dddocr库可以支持识别不同类型的验证码。

示例1:英文字母验证码识别

import dddocr

def recognize_letter_captcha(image_path):
    ocr = dddocr.DddOcr()
    result = ocr.classification(image_path, model_type='letter')
    return result

image_path = 'letter_captcha.png'
result = recognize_letter_captcha(image_path)
print(result)

示例2:数字验证码识别

import dddocr

def recognize_number_captcha(image_path):
    ocr = dddocr.DddOcr()
    result = ocr.classification(image_path, model_type='number')
    return result

image_path = 'number_captcha.png'
result = recognize_number_captcha(image_path)
print(result)

示例3:混合验证码识别

import dddocr

def recognize_mixed_captcha(image_path):
    ocr = dddocr.DddOcr()
    result = ocr.classification(image_path, model_type='mixed')
    return result

image_path = 'mixed_captcha.png'
result = recognize_mixed_captcha(image_path)
print(result)

示例4:滑动验证码识别

import dddocr

def recognize_slide_captcha(image_path):
    ocr = dddocr.DddOcr()
    result = ocr.slide_captcha(image_path)
    return result

image_path = 'slide_captcha.png'
result = recognize_slide_captcha(image_path)
print(result)

示例5:中文验证码识别

import dddocr

def recognize_chinese_captcha(image_path):
    ocr = dddocr.DddOcr()
    result = ocr.classification(image_path, model_type='chinese')
    return result

image_path = 'chinese_captcha.png'
result = recognize_chinese_captcha(image_path)
print(result)

以上示例中,image_path为待识别的验证码图片路径,通过调用不同的识别函数来识别不同类型的验证码。每个示例都创建了一个dddocr的实例,然后调用相应的方法进行识别。识别结果会以字符串形式返回。实际应用中,可能需要根据具体情况进行参数调整和模型训练,以提高识别准确性。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

3、selenium+dddorc自动化登录识别验证码

使用selenium和dddocr进行自动登录时,可以通过以下步骤识别验证码:

  1. 安装selenium和dddocr库:
  pip install selenium
  pip install dddocr
  1. 导入必要的库和模块:
   from selenium import webdriver
   from selenium.webdriver.common.by import By
   from selenium.webdriver.support.ui import WebDriverWait
   from selenium.webdriver.support import expected_conditions as EC
   import dddocr
  1. 创建一个dddocr的实例:
  ocr = dddocr.DddOcr()
  1. 使用selenium打开登录页面,并找到验证码图片元素:
   driver = webdriver.Chrome()
   driver.get('https://example.com/login')
   captcha_image = driver.find_element(By.ID, 'captcha-image')
  1. 获取验证码图片的src属性,并下载保存到本地:
  captcha_image_src = captcha_image.get_attribute('src')
  driver.get_screenshot_as_file('screenshot.png')
  1. 使用dddocr识别验证码:
   result = ocr.classification('screenshot.png', model_type='mixed')
   captcha_code = result[0]['text']
  1. 在登录页面找到验证码输入框,并输入识别出的验证码:
   captcha_input = driver.find_element(By.ID, 'captcha-input')
   captcha_input.send_keys(captcha_code)
  1. 输入其他登录信息,并提交表单:
   username_input = driver.find_element(By.ID, 'username-input')
   password_input = driver.find_element(By.ID, 'password-input')
   username_input.send_keys('your_username')
   password_input.send_keys('your_password')
   submit_button = driver.find_element(By.ID, 'submit-button')
   submit_button.click()

完整的代码示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import dddocr

ocr = dddocr.DddOcr()

driver = webdriver.Chrome()
driver.get('https://example.com/login')

captcha_image = driver.find_element(By.ID, 'captcha-image')
captcha_image_src = captcha_image.get_attribute('src')
driver.get_screenshot_as_file('screenshot.png')

result = ocr.classification('screenshot.png', model_type='mixed')
captcha_code = result[0]['text']

captcha_input = driver.find_element(By.ID, 'captcha-input')
captcha_input.send_keys(captcha_code)

username_input = driver.find_element(By.ID, 'username-input')
password_input = driver.find_element(By.ID, 'password-input')
username_input.send_keys('your_username')
password_input.send_keys('your_password')

submit_button = driver.find_element(By.ID, 'submit-button')
submit_button.click()

以上代码示例中,假设登录页面的验证码图片元素的id为'captcha-image',验证码输入框的id为'captcha-input',用户名输入框的id为'username-input',密码输入框的id为'password-input',登录按钮的id为'submit-button'。根据实际情况,需要替换这些id值为实际的页面元素id。

注意:上述示例仅适用于验证码图片直接以img标签的形式嵌入在页面中的情况。

4、验证码通过Ajax请求加载如何识别

如果验证码是通过Ajax请求加载的,可以通过以下步骤识别验证码:

  1. 使用selenium打开登录页面,并等待验证码图片加载完成:
   driver = webdriver.Chrome()
   driver.get('https://example.com/login')

   wait = WebDriverWait(driver, 10)
   captcha_image = wait.until(EC.presence_of_element_located((By.ID, 'captcha-image')))
  1. 执行JavaScript代码,获取验证码图片的base64编码:
   captcha_image_base64 = driver.execute_script("return arguments[0].toDataURL('image/png').substring(21);", captcha_image)
  1. 将base64编码解码为图片,并保存到本地:
   with open('captcha.png', 'wb') as f:
       f.write(base64.b64decode(captcha_image_base64))
  1. 使用dddocr识别验证码:
  result = ocr.classification('captcha.png', model_type='mixed')
  captcha_code = result[0]['text']
  1. 在登录页面找到验证码输入框,并输入识别出的验证码:
   captcha_input = driver.find_element(By.ID, 'captcha-input')
   captcha_input.send_keys(captcha_code)
  1. 输入其他登录信息,并提交表单:
   username_input = driver.find_element(By.ID, 'username-input')
   password_input = driver.find_element(By.ID, 'password-input')
   username_input.send_keys('your_username')
   password_input.send_keys('your_password')

   submit_button = driver.find_element(By.ID, 'submit-button')
   submit_button.click()

完整的代码示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import dddocr
import base64

ocr = dddocr.DddOcr()

driver = webdriver.Chrome()
driver.get('https://example.com/login')

wait = WebDriverWait(driver, 10)
captcha_image = wait.until(EC.presence_of_element_located((By.ID, 'captcha-image')))

captcha_image_base64 = driver.execute_script("return arguments[0].toDataURL('image/png').substring(21);", captcha_image)

with open('captcha.png', 'wb') as f:
    f.write(base64.b64decode(captcha_image_base64))

result = ocr.classification('captcha.png', model_type='mixed')
captcha_code = result[0]['text']

captcha_input = driver.find_element(By.ID, 'captcha-input')
captcha_input.send_keys(captcha_code)

username_input = driver.find_element(By.ID, 'username-input')
password_input = driver.find_element(By.ID, 'password-input')
username_input.send_keys('your_username')
password_input.send_keys('your_password')

submit_button = driver.find_element(By.ID, 'submit-button')
submit_button.click()

以上代码示例中,假设登录页面的验证码图片元素的id为'captcha-image',验证码输入框的id为'captcha-input',用户名输入框的id为'username-input',密码输入框的id为'password-input',登录按钮的id为'submit-button'。根据实际情况,需要替换这些id值为实际的页面元素id。

注意:上述示例仅适用于验证码图片通过Ajax请求加载,并且返回的是base64编码的情况。如果验证码图片是通过其他方式加载的,或者返回的是其他格式的数据(如图片的URL),则需要根据具体情况进行相应的处理。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium+dddocr 轻松解决Web自动化验证码识别! 的相关文章

随机推荐

  • 使用vscode写vue文件代码有时不提示

    背景 安装了volar插件 但是在vue文件中导入js文件代码不提示 准确来说是有时提示有时不提示 解决方案 插件冲突 卸载 JavaScript ES6 code snippets 插件 这个插件在vue文件中适配不是很好 很有可能是插件
  • 详细解读一下chatGPT模型提取信息和生成回答的过程

    当ChatGPT接收到一个问题时 它首先使用内部的算法将问题转换为机器可理解的格式 例如将问题转换为词向量 然后将其输入到预训练模型中 预训练模型是通过在大规模语料库上训练的神经网络模型 它可以将输入的文本序列转换为一个输出的文本序列 在这
  • vue element el-date-picker日期选择器选择时间区间

    1 在项目中使用到了element日期选择组件 选择日期区间最大为6个月之前是让不在这区间给限制不让选择 html部分
  • JAVA8 List的去重、过滤、映射(map)、分组、统计(sum、max、min、avg)、分页

    目录 1 实现List对象集合的简单去重 distinct 2 实现List集合的根据属性 name 去重 3 实现List对象集合的简单过滤 过滤为 null 的对象 4 实现List对象集合中获取其中某一属性 weight 的List集
  • 二、Shell解析器

    1 Shell解析器有哪些 在linux服务器上面执行如下命令 sudo cat etc shells 可以看到有6种解析器 2 linux默认使用的解析器是哪种呢 使用命令 echo SHELL命令 可以查看到 默认使用的是bash解析器
  • centos 网卡显示Error, some other host already uses address

    1 nmcli已经关闭 2 重启网卡报错 mac地址被占用 最后的解决办法 原因 地址冲突 1 永久解决 换IP地址 2 临时解决 以下方案 vi etc sysconfig network scripts ifup eth 注释下面那五行
  • 软件架构模式+系统架构+架构作图

    架构模式对比 分层模式 一般信息系统中最常见的4层划分如下 Presentation layer 表示层 也就是UI层 Application layer 应用层 也就是服务层 Business logic layer 业务逻辑层 也就是领
  • C语言关于动态内存管理(malloc、calloc、realloc、free)

    动态内存 前言 若是没有动态容量 在创建变量时 只能预先设计好容量 而这样的容量可能会出现过多的浪费或者是容量不足 不能灵活的增加或减少容量 运用好关于动态内存管理的函数 就可以解决这些问题 让我们来了解这些函数吧 一 malloc voi
  • LightGroupButton* sender = static_cast<LightGroupButton*>(QObject::sender());

    当某一个Object emit一个signal的时候 它就是一个sender 系统会记录下当前是谁emit出这个signal的 因此我们可以从对应的槽函数里面获得哪个发送的信号 有可能多个Object的signal会连接到同一个signal
  • 再见2015,一个小白领的格调

    当我一直沉默着做事情的时候 时间就像一条脱缰的野狗一样 肆意狂奔 快到让我忘记了买回老家过冬的衣服便放春节了 以至于现在我还满脑子的考虑穿什么过冬 而不是感叹15年已经过完 2015年1月1日 六个小伙伴在吃烤肉 依次诉说各自的新年计划 我
  • 逆矩阵(inverse matrix)的概念及其意义

    逆矩阵 inverse matrix 的概念及其意义 2015年09月17日 00 09 10 阅读数 21838 标签 逆矩阵为何需要逆矩阵逆矩阵应用逆矩阵实例逆矩阵与倒数 更多 版权声明 本文为博主原创文章 未经博主允许不得转载 htt
  • windows 远程连接debian_有没有xrdp大神,用windows远程debian一片空白。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 补充俩文件吧 分别是以root登录和以另一个非root账号登录的日志 root登录的 20170510 22 30 04 INFO A connection received from ffff
  • 利用el-upload组件在vue中上传文件

    以上传图片为例 action 使用的接口地址 on change 改变时调用的方法 file list 文件列表 limit 限制上传文件的数量 on success 成功后调用的方法 on exceed 文件超出个数限制时调用的方法 更多
  • 为什么你的LDO输出不稳定?

    原文来自微信公众号 工程师看海 前一阵朋友和我说当初用某型号LDO时 发现输出异常 仔细阅读datasheet后 更换输出电容解决 LDO的输出电容对性能至关重要 除了会提高电源抑制比PSRR抑制噪声外 对环路稳定性也至关重要 电容除了容值
  • 耗时操作ANR和handler

    耗时操作 1 什么是ANR 在应用程序的主线程中执行一段耗时的代码 就有可能出现ANR异常 耗时的代码未执行结束时 界面会卡住 用户对界面进行了操作 10秒之后耗时代码如果还未结束 就会出现ANR异常 2 怎么避免ANR 主线程中不要执行耗
  • spark报错:WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI...

    1 报错描述 在使用spark跑任务时 进度条突然停止 并且warning了 而且持续 WARN TaskSchedulerImpl Initial job has not accepted any resources check your
  • 数据结构与算法--用c语言建立栈以及其相关操作

    一 栈的定义和特点 栈 stack 是限定仅在表尾进行插入或删除操作的线性表 因此 对栈来说 表尾端有其特殊含义 称为栈顶 top 相应地 表头端称为栈底 bottom 不含元素的栈称为空栈 假设栈S a1 a2 an 则称a1为栈底元素
  • NOIP2004火星人

    法1 裸的全排列 加点优化也可以很快 洛谷6ms 1 include
  • 同花顺 python量化交易_开启量化第一步!同花顺iFinD数据接口免费版简易操作教程...

    来源 雪球App 作者 同花顺 iFinD https xueqiu com 6706494343 141951051 金融市场波动频繁 投资往往会夹杂非理性的情绪 而量化交易 旨在以先进的数学模型替代人为的主观判断 利用计算机技术从庞大的
  • Selenium+dddocr 轻松解决Web自动化验证码识别!

    大家好 我是小濠 今天给大家推荐一款验证码识别神器 dddocr 1 介绍 dddocr是一个基于深度学习的OCR Optical Character Recognition 光学字符识别 库 用于识别图片中的文字 它可以识别各种类型的文字