自動化終端考核檢查系統的搭建過程

来源:https://www.cnblogs.com/BTday/archive/2022/04/11/16117880.html
-Advertisement-
Play Games

自從2020年進入公司從學生變成社會人以來,接手的第一項工作就是檢查並整改公司終端的季度考核指標; 季度考核是公司總部要求的,每季度一次(廢話。。),主要就是檢查內網終端各類管理軟體(桌面管理、防病毒等等)的安裝率與版本合規情況; 需要管理的終端量在1500台左右,各類軟體都有總部提供的平臺,需要做 ...


自從2020年進入公司從學生變成社會人以來,接手的第一項工作就是檢查並整改公司終端的季度考核指標;

季度考核是公司總部要求的,每季度一次(廢話。。),主要就是檢查內網終端各類管理軟體(桌面管理、防病毒等等)的安裝率與版本合規情況;

需要管理的終端量在1500台左右,各類軟體都有總部提供的平臺,需要做的就是去各個平臺導出數據、Excel彙總計算,

然後看看哪項考核不達標,通知負責終端維護的外包公司去各個地點做維護;

這項工作雖然不難,但是每季度末都要重覆地檢查確保達標,因此工作量很大,每天至少要花一兩個小時;

其實在剛接手的時候就有做一個自動檢查系統的想法,奈何當時的我技術力還不夠,並且剛剛進入公司需要學習的東西太多,就暫且擱置了;

22年一季度不是很忙,就利用工作之餘的上班時間做出來了,每天自動出結果發給外包公司,很大程度上減少了季度考核時的工作量;

主要的實現過程大致是三個步驟:

一、利用Python的selenium WEB自動化工具去各個平臺下載數據;

二、利用Python的pymysql資料庫工具將數據文件導入MySQL資料庫;

三、MySQL資料庫按照考核標準計算結果,生成結果文件,再通過郵件發送結果文件。


一、利用Python的selenium WEB自動化工具去各個平臺下載數據

其實用瀏覽器控制去導數可靠性比較差,並且效率比較低,但是去找各個平臺的項目組對接資料庫實在太麻煩了,人家也不見得樂意開放資料庫給你用;

並且這個工具最多季度末的時候一天跑兩三次,並不需要太高的效率,所以就採用了selenium WEB自動化;

selenium的學習參考的是騰訊雲社區的教程:Python中Selenium庫使用教程詳解 - 雲+社區 - 騰訊雲 (tencent.com)

首先是pip安裝selenium,指定國內源加快下載速度:

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

我用的是谷歌瀏覽器版本99,需要下載一個對應版本99的驅動程式才能調起瀏覽器,下載地址:http://chromedriver.storage.googleapis.com/index.html;

使用示例:

from selenium import webdriver
from time import sleep

# 實例化一款瀏覽器
browser = webdriver.Chrome(executable_path = "chromedriver.exe")
# 對指定的url發起請求
browser.get("https://www.bilibili.com/")
# 設定視窗大小
browser.set_window_size(1600, 900)
# 在頁面中尋找元素
element = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[1]/ul[2]/li[1]/li/div/div/span') # “登錄”
# 對元素進行操作
element.click() # 點擊
# 延時3秒,等待頁面回應
sleep(3)
# 關閉瀏覽器
browser.quit()

一般瀏覽器都可以用F12進入開發工具查看頁面中的元素,點擊1處的工具,再點擊2處頁面中任意的元素,在3處會跳轉並高亮元素在HTML代碼中的位置;

我是按照完整xpath來尋找元素的browser.find_element_by_xpath(),也可以使用元素的id、name、標簽等等;

點擊元素後element.click(),如果有後續操作可以添加一個延時,否則頁面可能來不及響應。

1. 切換frame

某些頁面會用到frame的結構,比如:

<html lang="en">
<head>
    <title>FrameTest</title>
</head>
<body>
<iframe src="a.html" id="frame1" name="myframe"></iframe>
</body>
</html>

在frame中的元素無法被browser.find_element_by_xpath()直接尋找到,需要進行frame的切換:

frame = browser.find_elements_by_tag_name('iframe')[1] # 切換frame
browser.switch_to.frame(frame)
element = browser.find_element_by_xpath('XXXXXX') # 尋找frame中的元素
element.click()
browser.switch_to.default_content() # 退出frame回到主體結構

如果需要回到主體結構繼續操作要使用browser.switch_to.default_content()

2. 切換瀏覽器視窗

某些地方點擊後會新建標簽頁或者彈出新的瀏覽器視窗,此時就需要切換視窗去繼續操作:

windows = browser.window_handles
browser.switch_to.window(windows[1]) # 打開了新頁面,需要切換視窗
element = browser.find_element_by_xpath('XXXXXX')
element.click()

3. 新建標簽頁

如果不想關閉瀏覽器,需要打開新的標簽頁繼續操作:

js = "window.open('https://www.douban.com/')"
browser.execute_script(js) # 在新標簽頁中訪問

4. 識別簡單的驗證碼

本來我以為用selenium查找元素一個一個去點是很重覆無聊且枯燥的工作,直到我遇到了一個平臺登錄的時候需要輸入一個圖片驗證碼(其他平臺都是只需要賬號密碼),事情突然變得有趣了起來;

首先我去找了一個比較輕量的圖片識別文字的工具——pytesseract


未完待續。。。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • 原文鏈接: Python 中的鴨子類型和猴子補丁 大家好,我是老王。 Python 開發者可能都聽說過鴨子類型和猴子補丁這兩個詞,即使沒聽過,也大概率寫過相關的代碼,只不過並不瞭解其背後的技術要點是這兩個詞而已。 我最近在面試候選人的時候,也會問這兩個概念,很多人答的也並不是很好。但是當我向他們解釋 ...
  • 《零基礎學Java》 操作線程的方法 操作線程有很多方法,這些方法可以使線程從某一種狀態過渡到另一種狀態。 線程的休眠 能控制線程行為的方法之一是調用sleep()方法,sleep()方法可以指定線程休眠的時間,線程休眠的時間以毫秒為單位。 線程的休眠 實例: public class Demo2 ...
  • Java是一門面向對象的編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程式員以優雅的思維方式進行複雜的編程。 Java具有簡單性、面向對... ...
  • 1. Seata的架構 Seata是 2019 年 1 月份螞蟻金服和阿裡巴巴共同開源的分散式事務解決方案。致力於提供高性能和簡單易用的分散式事務服務,為用戶打造一站式的分散式解決方案。 官網地址:http://seata.io/,其中的文檔、播客中提供了大量的使用說明、源碼分析。 Seata事務管 ...
  • 上周五夜間,服務端程式發版期間,客戶端程式在通過http調用服務端介面時出現一堆 “拒絕連接 (Connection refused) ” 異常。 2022-04-08 22:22:28,676 ERROR [2022040822222771523885] ? (com.cn.yft.pay.uti ...
  • 說在前面的話 前言 內容介紹 介紹 JavaSE 基礎的基本語法知識,不會包含特別難以理解或更深層次的內容,通俗易懂。 前提 本書的所有例子使用 JDK8 在 Windows10 系統下完成,所以預設使用 exe;若你與我的不一致,快捷鍵、源碼都有可能不同,但網上無償資源十分的多,搜索瞭解不同之處即 ...
  • 第零章 說在前面的話 1.1.0.1 前言 1.1.0.2 自序 第一章 JDK 1.1.1.1 Java 介紹 1.1.1.2 JDK 下載 1.1.1.3 編寫代碼前的準備 1.1.1.4 Typora 軟體簡單使用 1.1.1.5 常用的 DOS 命令 1.1.1.6 Jopin 使用 1.1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...