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