使用 Zig 實現自動化登入並處理驗證碼

ttocr、com發表於2024-11-29

Zig 是一種新的系統程式語言,它提供了與 C 類似的效能和控制能力,同時還具備更簡潔的語法和強大的型別系統。在本篇文章中,我們將展示如何利用 Zig 語言配合外部工具來處理網頁自動化中的驗證碼問題。我們將藉助外部 Python 指令碼來執行驗證碼的影像處理與識別,並透過 Zig 進行控制和排程。

  1. 環境準備
    在使用 Zig 進行自動化控制時,我們依賴 Python 指令碼來進行驗證碼的處理和識別。以下是您需要的工具:

Zig:主要用於編寫控制指令碼,負責排程 Python 指令碼執行。
Selenium:用於自動化瀏覽器操作。
Pillow 和 pytesseract:用於驗證碼影像的裁剪與識別。
Tesseract OCR:識別影像中的文字。
2. Zig 指令碼控制流程
Zig 語言本身不直接支援瀏覽器自動化,但可以呼叫外部程式,像 Python 指令碼,來處理驗證碼的識別。我們將使用 Zig 編寫一個控制流程,啟動一個外部 Python 指令碼來完成驗證碼的處理,然後返回識別結果。

Zig 程式碼:控制自動化登入
zig

const std = @import("std");
const fs = std.fs;
const os = std.os;
const subprocess = std.os.subprocess;

pub fn main() void {
// 開啟瀏覽器並獲取驗證碼
const python_script = "recognize_captcha.py"; // 假設我們已經有這個 Python 指令碼

// 呼叫 Python 指令碼來獲取驗證碼
const process = subprocess.Executor.init(python_script);
const result = process.wait() catch |err| {
    std.debug.print("Error running Python script: {}\n", .{err});
    return;
};

// 檢查 Python 指令碼的輸出
const captcha_text = result.stdout;
std.debug.print("識別到的驗證碼: {}\n", .{captcha_text});

// 假設我們將驗證碼填寫到表單並提交
if (captcha_text.len > 0) {
    // 此處可以執行提交驗證碼到表單的操作,假設它已經完成
    std.debug.print("驗證碼識別並提交成功\n", .{});
} else {
    std.debug.print("驗證碼識別失敗,請重新嘗試\n", .{});
}

}
解釋
subprocess.Executor:我們透過 subprocess.Executor 執行外部的 Python 指令碼。該指令碼負責獲取驗證碼並透過 Tesseract 識別它。
捕獲輸出:result.stdout 包含 Python 指令碼的輸出,即識別出來的驗證碼文字。
3. Python 處理驗證碼
Python 指令碼負責截圖驗證碼並使用 Tesseract 進行文字識別。我們使用 Selenium 獲取驗證碼圖片並截圖。

Python 程式碼:驗證碼識別
python

from selenium import webdriver
from PIL import Image
import pytesseract
import time

設定 WebDriver,開啟目標登入頁面

driver = webdriver.Chrome()
driver.get("http://example.com/login")

獲取驗證碼圖片的元素

captcha_element = driver.find_element_by_id("captcha_image")

獲取驗證碼圖片的位置和尺寸

location = captcha_element.location
size = captcha_element.size
left = int(location['x'])
top = int(location['y'])
right = int(location['x'] + size['width'])
bottom = int(location['y'] + size['height'])

截圖並裁剪出驗證碼部分

screenshot_path = "captcha.png"
driver.get_screenshot_as_file(screenshot_path)

裁剪出驗證碼區域

image = Image.open(screenshot_path)
captcha_image = image.crop((left, top, right, bottom))

使用 Tesseract OCR 識別驗證碼內容

captcha_text = pytesseract.image_to_string(captcha_image).strip()
print(f"識別到的驗證碼是:{captcha_text}")

關閉瀏覽器更多內容訪問ttocr.com或聯絡1436423940

driver.quit()

將驗證碼返回給 Zig 指令碼

print(captcha_text)
解釋
Selenium 截圖:Selenium 用於自動化瀏覽器操作,定位驗證碼元素,截圖並裁剪出驗證碼區域。
Tesseract OCR:我們使用 Tesseract 對擷取的驗證碼進行識別,提取出驗證碼的文字。
4. Zig 與 Python 協作
Zig 指令碼:負責控制自動化任務,呼叫 Python 指令碼執行驗證碼處理。
Python 指令碼:執行驗證碼識別,並將結果返回給 Zig 指令碼。
5. 執行登入
當 Zig 指令碼成功獲取到識別的驗證碼文字後,它可以將這個文字填寫到登入表單中。假設我們已經有一個名為 submit_login_form 的函式,它可以自動填寫驗證碼並提交表單。

相關文章