使用 Nim 和 Python 自動化處理登入和驗證碼

ttocr、com發表於2024-11-29
  1. 專案概述
    這個專案的目標是實現一個自動化登入過程,其中包括:

使用 Nim 編寫自動化指令碼來控制瀏覽器。
透過 Selenium 完成自動化操作。
使用外部 Python 指令碼處理驗證碼的識別。
2. 環境準備
Nim 程式語言:用於編寫主指令碼來自動化登入操作。
Selenium (Python):用 Python 編寫驗證碼識別的程式碼。
Pillow (Python):處理截圖和影像裁剪。
Tesseract OCR (Python):識別驗證碼中的文字。
3. Nim 自動化控制
我們將使用 Nim 來啟動一個外部的 Python 指令碼並與瀏覽器進行互動。

Nim 程式碼:啟動 Python 指令碼進行驗證碼處理
nim
更多內容訪問ttocr.com或聯絡1436423940
import os
import subprocess

Nim 函式用來啟動 Python 指令碼處理驗證碼

proc runPythonScript(scriptPath: cstring) {.importjs: "var cmd = require('child_process'); cmd.execFile(scriptPath, function(err, stdout, stderr) { if (err) { console.log(stderr); } else { console.log(stdout); } });" .}

proc loginAutomation() =

開啟瀏覽器,訪問登入頁面,提交使用者資訊,處理驗證碼

echo "Starting the login automation process..."

這裡你可以用 Selenium WebDriver 和 Nim 的 Webdriver 庫來控制瀏覽器,示例如下:

假設你有一個 Webdriver 庫(可以使用 Nim 的 bindings 庫或外部庫)

假設你已經透過某種方式開啟了網頁並執行了登入操作

一旦驗證碼出現,就呼叫 Python 指令碼處理

echo "Captcha detected, invoking Python script to handle it..."

呼叫 Python 指令碼來處理驗證碼識別

runPythonScript("/path/to/your/python_script.py")

echo "Captcha processing complete."

主程式入口

when isMainModule:
loginAutomation()
4. Python 程式碼:驗證碼處理與識別
Python 部分的程式碼負責截圖、裁剪驗證碼區域並使用 OCR 識別驗證碼內容。

python

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

啟動瀏覽器並開啟登入頁面

driver = webdriver.Chrome()

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

輸入使用者名稱和密碼

driver.find_element_by_id("username").send_keys("testuser")
driver.find_element_by_id("password").send_keys("password123")
time.sleep(2)

擷取驗證碼圖片並儲存

captcha_element = driver.find_element_by_id("captcha_img")
location = captcha_element.location
size = captcha_element.size

獲取頁面截圖並裁剪驗證碼區域

driver.save_screenshot("fullpage.png")
image = Image.open("fullpage.png")

計算驗證碼區域

left = location['x']
top = location['y']
right = left + size['width']
bottom = top + size['height']

裁剪出驗證碼圖片

captcha_image = image.crop((left, top, right, bottom))
captcha_image.save("captcha.png")

使用 Tesseract 識別驗證碼內容

captcha_text = pytesseract.image_to_string(captcha_image)
print("識別出的驗證碼是:", captcha_text)

將識別結果輸入到驗證碼輸入框

driver.find_element_by_id("captcha_input").send_keys(captcha_text)
driver.find_element_by_id("login_button").click()

關閉瀏覽器

driver.quit()
5. 程式碼說明
Nim 指令碼:

使用 subprocess 模組呼叫 Python 指令碼來處理驗證碼。
自動執行一系列操作,比如啟動瀏覽器並透過 Selenium 完成登入操作。
檢測到驗證碼後,呼叫 Python 處理驗證碼的指令碼。
Python 指令碼:

Selenium 控制瀏覽器開啟登入頁面,輸入使用者名稱、密碼。
透過截圖獲取驗證碼圖片,並利用 Tesseract OCR 庫識別驗證碼的內容。
將識別出的驗證碼填入輸入框並提交。

相關文章