使用 Ruby 识别英文数字验证码

news/2024/10/21 12:38:34
  1. 环境准备
    在开始之前,确保安装以下 gem:

bash

gem install rmagick httparty tesseract-ocr
你还需要确保已经安装了 Tesseract OCR 引擎,并配置好其路径。

  1. 下载验证码图片
    使用 HTTParty 下载验证码图片并保存到本地:

ruby

require 'httparty'

class CaptchaDownloader
def self.download_captcha(url, save_path)
response = HTTParty.get(url)
if response.success?
File.open(save_path, 'wb') do |file|
file.write(response.body)
end
puts "验证码图片已保存为 #{save_path}"
else
puts "下载失败: #{response.code}"
end
end
end
3. 图像处理与 OCR 识别
使用 RMagick 和 tesseract-ocr 进行 OCR 识别:

ruby

require 'rmagick'
require 'tesseract-ocr'

class CaptchaRecognizer
def self.recognize_captcha(image_path)
image = Magick::Image.read(image_path).first
text = Tesseract::Engine.new.do_ocr(image)

puts "识别结果: #{text.strip}"
text.strip

end
end
4. 自动化登录
使用 HTTParty 发送 POST 请求,模拟登录操作:

ruby
更多内容联系1436423940
class Login
def self.login(username, password, captcha)
url = 'https://captcha7.scrape.center/login'
response = HTTParty.post(url, body: { username: username, password: password, captcha: captcha })

if response.success?puts "登录成功"
elseputs "登录失败: #{response.code}"
end

end
end
5. 主程序
整合上述代码,创建主程序:

ruby

class Program
def self.run
captcha_url = 'https://captcha7.scrape.center/captcha.png'
captcha_path = 'captcha.png'

# 下载验证码图片
CaptchaDownloader.download_captcha(captcha_url, captcha_path)# 识别验证码
captcha_text = CaptchaRecognizer.recognize_captcha(captcha_path)# 模拟登录
unless captcha_text.nil?Login.login('admin', 'admin', captcha_text)
end

end
end

Program.run

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

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

相关文章

洛谷题单指南-字符串-P4735 最大异或和

原题链接:https://www.luogu.com.cn/problem/P4735 题意解读:已知长度为n的数组a[],要在l~r范围找到一个p,使得a[p]^a[p+1]^...^a[n]^x最大,求这个最大的异或值。 解题思路: 1、利用前缀和将问题转化 设s[]是a[]的前缀异或数组,要计算a中一段范围l~r的异或,可以借助于s…

go中,iota要放在const的最前面来声明

如图所示,1必须在2的前面声明,iota在const()里要最先声明,否则iota异常

PHP cli模式和fpm模式有什么区别

PHP的CLI模式与FPM模式主要的区别包括:它们的运行环境不同、使用场景不同、性能表现不同、配置方式不同。 在深入了解两者之间的区别之前,我们首先必须了解CLI(命令行界面)和FPM(FastCGI进程管理器)的基本概念。CLI模式是专门为命令行脚本执行设计的,并在不与Web服务器集…

为什么说Kafka还不是完美的实时数据通道

本文主要谈谈Kafka用于实时数据通道场景的缺陷,以及如何在架构上进行弥补。 Kafka归属于消息队列类产品,其他竞品还有RabbitMQ、RocketMQ等,总的来说它们都是基于生产者、中介和消费者三种角色,提供高并发、大数据量场景下的消息传递。Kafka诞生自Hadoop生态,与生态中的其…

如何在C语言中使用外部库

在C语言中使用外部库,首先,你需要找到你需要的库,这可以在网上或者在本地机器上,并获取库的路径。其次,你需要用预处理指令#include <库名.h>将库包含到你的程序中。最后,你需要在链接阶段,用-l库名将库链接到你的程序中。使用外部库可以方便地使用库中预定义的函…

CTF学习( 3):Misc(二维码)

1.见到二维码图片,查看详细信息是否藏有flag(无果),使用QR Research查看二维码中是否藏有隐藏信息 (发现) 2.使用010 editor打开后文本搜索flag,key等关键字无果->发现在文件尾藏了数据(笔记:PNG文件由文件头"89 50 4E 47"和数据块"chuk"组成,50 4B 03 …

modsecurity: 规则的体系一

一,每个事务的生命周期: 如图:每个事务在modsecurity需要经历5个阶段,在每个阶段可能需要解析等操作,然后调用相应阶段的规则进行匹配,对应规则中的phase 阶段一:request headers请求头,这是modsecurity最先接触到的数据, 需要验证请求头相关的规则,并根据请…

SpringBoot 使用WebSocket

WebSocket 是一种网络通信协议,提供了在单个TCP连接上进行全双工通信的能力。这意味着客户端和服务器可以同时发送和接收数据,而不需要等待对方的回应。 Spring Boot 提供了对WebSocket的自动配置和简化的编程模型,使得在Spring Boot应用程序中集成WebSocket变得相对简单。 …