使用 Elixir 实现验证码识别与自动化登录

  1. 安装所需依赖
    我们需要使用以下库:

HTTPoison:用于发送 HTTP 请求,下载验证码图片。
ExImage:用于图像处理(如转换为灰度图像)。
Tesseract:通过系统调用 Tesseract 进行 OCR 识别。
首先,在你的 Elixir 项目中,确保在 mix.exs 中添加以下依赖:

elixir

defp deps do
[
{:httpoison, "~> 2.0"},
{:ex_image, "~> 0.1.0"}
]
end
然后运行以下命令安装依赖:

bash

mix deps.get
确保在系统中安装 Tesseract,可以使用以下命令:

bash

sudo apt install tesseract-ocr
2. 下载验证码图片
我们使用 HTTPoison 下载验证码图片并保存到本地:

elixir

defmodule CaptchaDownloader do
def download_captcha(url, save_path) do
{:ok, response} = HTTPoison.get(url)
File.write!(save_path, response.body)
IO.puts("验证码图片已保存为 #{save_path}")
end
end

CaptchaDownloader.download_captcha("https://captcha7.scrape.center/captcha.png", "captcha.png")
3. 图像处理和 OCR 识别
接下来,我们使用 ExImage 库将验证码图片转换为灰度图像,并调用 Tesseract 进行识别:

elixir

defmodule CaptchaProcessor do
def preprocess_image(input_path, output_path) do
{:ok, image} = ExImage.load(input_path)
gray_image = ExImage.convert(image, :grayscale)
ExImage.save(gray_image, output_path)
IO.puts("处理后的验证码图片已保存为 #{output_path}")
end

def recognize_captcha(image_path) do
{output, 0} = System.cmd("tesseract", [image_path, "stdout"])
output
end
end

CaptchaProcessor.preprocess_image("captcha.png", "captcha_processed.png")
captcha_text = CaptchaProcessor.recognize_captcha("captcha_processed.png")
IO.puts("识别结果: #{captcha_text}")
4. 自动化登录
最后,使用 HTTPoison 发送 POST 请求,模拟登录操作,并传递用户名、密码和识别出的验证码:

elixir
更多内容联系1436423940
defmodule Login do
def login(username, password, captcha) do
url = "https://captcha7.scrape.center/login"
body = %{username: username, password: password, captcha: String.trim(captcha)}

headers = [{"Content-Type", "application/json"}]

{:ok, response} = HTTPoison.post(url, Jason.encode!(body), headers)

if response.status_code == 200 do
  IO.puts("登录成功")
else
  IO.puts("登录失败")
end

end
end

Login.login("admin", "admin", captcha_text)

posted @ 2024-10-18 13:18  啊飒飒大苏打  阅读(5)  评论(0编辑  收藏  举报