使用 Crystal 實現驗證碼識別與自動化登入

啊飒飒大苏打發表於2024-10-18
  1. 安裝所需依賴
    首先,確保你已經安裝了 Crystal。可以從 Crystal 官方網站 獲取安裝指南。

接下來,我們需要安裝以下依賴:

HTTP::Client:用於傳送 HTTP 請求。
Tesseract:用於 OCR 識別(需在系統中安裝)。
使用以下命令安裝 Tesseract:

bash

sudo apt install tesseract-ocr
2. 下載驗證碼圖片
使用 Crystal 的 HTTP 客戶端下載驗證碼圖片並儲存到本地:

crystal

require "http/client"
require "file_utils"

def download_captcha(url : String, save_path : String)
response = HTTP::Client.get(url)
File.write(save_path, response.body)
puts "驗證碼圖片已儲存為 #{save_path}"
end

download_captcha("https://captcha7.scrape.center/captcha.png", "captcha.png")
3. 影像處理和 OCR 識別
接下來,我們使用 Tesseract 進行 OCR 識別。我們可以透過執行系統命令來呼叫 Tesseract:

crystal

def preprocess_image(input_path : String, output_path : String)
system("convert #{input_path} -colorspace Gray #{output_path}")
puts "處理後的驗證碼圖片已儲存為 #{output_path}"
end

def recognize_captcha(image_path : String) : String
output = tesseract #{image_path} stdout
output
end

preprocess_image("captcha.png", "captcha_processed.png")
captcha_text = recognize_captcha("captcha_processed.png")
puts "識別結果: #{captcha_text}"
4. 自動化登入
最後,使用 HTTP 客戶端傳送 POST 請求,模擬登入操作,並傳遞使用者名稱、密碼和識別出的驗證碼:

crystal

require "http/client"
require "json"

def login(username : String, password : String, captcha : String)
url = "https://captcha7.scrape.center/login"
data = { username: username, password: password, captcha: captcha.trim }.to_json
response = HTTP::Client.post(url, data, headers: {"Content-Type" => "application/json"})

if response.status_code == 200
puts "登入成功"
else
puts "登入失敗"
end
end

login("admin", "admin", captcha_text)

相關文章