首页 > 其他分享 >Selenium+dddocr轻松解决Web自动化验证码识别

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

时间:2023-09-18 13:59:05浏览次数:63  
标签:Web dddocr driver image Selenium 验证码 captcha input

大家好,我是狂师,今天给大家推荐一款验证码识别神器: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的实例,然后调用相应的方法进行识别。识别结果会以字符串形式返回。
实际应用中,可能需要根据具体情况进行参数调整和模型训练,以提高识别准确性。

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),则需要根据具体情况进行相应的处理。

标签:Web,dddocr,driver,image,Selenium,验证码,captcha,input
From: https://www.cnblogs.com/jinjiangongzuoshi/p/17711678.html

相关文章

  • vs打开项目出现“尚未配置为Web项目XXXX指定的本地IIS URL HTTP://localhost:…… .要
    用把工程文件(.vcxproj文件打开找到如下代码片段 ,请将下面片段代码中的(最好用notepad++打开)<UseIIS>True</UseIIS>、<AutoAssignPort>True</AutoAssignPort>节点的值改为False<WebProjectProperties><UseIIS>True</UseIIS><AutoAssignPor......
  • ASP.Net Web项目调试运行没问题,发布后一直403
    ASP.NetWeb项目调试运行没问题,发布一直403因为换了仓库,同事移了下项目,然后就如标题了,经过几个小时排查,发现项目中只有Global.asax.cs而Global.asax没有包含进项目…特此记录下......
  • vue打包后webview加载本地html显示空白页的解决历程
    vue打包后放进androidasserts中webview死活加载不出本地html,一直显示空白,AndroidStudioLogcat也没个啥提示,用浏览器打开却是正常,单独建了html文件放进去也能显示,上火,只好重载webview的事件来获取报错内容:webView.setWebViewClient(newWebViewClient(){@Override......
  • 基于javaweb远程教育网站开发与实现-计算机毕业设计源码+LW文档
    一、课题简介本课题将设计并实现一个基于JAVAWEB远程教育网站,根据课题的需求制定技术开发方案,可分别实现管理员与普通用户的注册、登录功能,可以实现客户端C++编程语言课程视频选取播放、学习进度记录、问答咨询论坛、在线测试等功能,实现服务端相关数据表的增删改查功能以及学生注......
  • WEB组态编辑器插件(BY组态)介绍
    BY组态是一款非常优秀的纯前端的【web组态插件工具】,采用标准HTML5技术,基于B/S架构进行开发,支持WEB端呈现,支持在浏览器端完成便捷的人机交互,简单的拖拽即可完成可视化页面的设计。可无缝嵌入到vue项目,react项目等,由于是原生js开发,对于前端的集成没有框架的限制。可快速构建和部署......
  • 页面输出太多会严重影响web程序的性能
    我有这样一个小程序:asp+sqlserver2000。数据量增加的很快,最近发现它的性能非常差,每次打开都需要十几秒,甚至几十秒,因为我的程序分页用的是我自己的分页程序:难道这个分页程序有问题,但是其他地方用到它没有感觉到慢呀,我没事就琢磨他,到网上查资料,结果没有具体查到说到我......
  • web打印时隐藏按钮及其他信息的方法讨论
    作者:塞北的雪(northsnow)web打印是困扰很多web开发人员的问题。有很多人提出了不同的web打印解决方案,还有很多的商业报表设计器来帮我们(需要付费的,我想很多人不想花这个钱),以前我也写过一篇关于web打印解决方案的文章:本文不会讨论这个问题。如果大家对于web打印各种解决......
  • html5 的 webScoket 和 C# 建立Socket连接
    html5的webScoket和C#建立Socket连接最近使用的web项目中,需要服务器直接触发前端显示效果。所以研究了一下websocket:名词解释:WebSocketWebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通过TCP来传输数据,但是它和http最大的不同有两点:1.WebSocket是一种双向......
  • Postman测试金蝶云星空Webapi【协同开发云下的本地环境】
    业务背景:基于金蝶云星空提供的接口测试,交付之前或者联调之前开发者先自测,即使纠错,提高效率。  大致流程:先请求登录接口,获得token后再请求标准webapi或者自定义接口,这样上下文才不会空。 说明: 金蝶的接口格式一般为:http://ServerIp/K3Cloud/接口命名空间.接口实现类名......
  • web2
    打开环境 直接逆向代码 得到flag ......