自動化測試中幾種常見驗證碼的處理方式及如何實現?

?

UI自動化測試時,需要對驗證碼進行識別處理,有很多方式,每種方式都有自己的特點,以下是一些常用處理方法,僅供參考。

1 去掉驗證碼

  • 從自動化的本質上來講,主要是提升測試效率等,但是為了去研究驗證碼以及提升驗證碼的識別效率,是需要投入比較大的時間的;
  • 去掉驗證碼無疑是最簡單的方式,而且對于開發而言這樣做,工作量也不是很大;
  • 但是建議在測試環境使用,生產環境禁用,因為存在安全問題。

2 設置萬能碼

  • 這個是筆者剛開始做自動化時首選的一個處理方法;
  • 因為既測試到了驗證碼的功能,而且也不用投入太大的精力去研究如何進行驗證碼識別;
  • 另外對于開發來說,內置一個萬能驗證碼也是非常簡單的事情;
  • 對于寫自動化腳本的人來說也是非常的方便,效率也高;
  • 但這個萬能驗證碼僅限相關人員知道,避免存在安全隱患。

3 保留一個資源

  • 有點驗證碼實則就是圖片資源;
  • 其實就是在制定的文件夾資源庫中隨機抽取一張,那么只需要將服務器上的所有圖片刪除,僅保留一張即可;
  • 說白了就相當于固定驗證碼。

4 光學字符識別

  • 其實就是通過Python-tesseract模塊來只能識別圖片中的驗證碼;
  • Python-tesseract是光學字符識別Tesseract OCRpython封裝類;
  • 其能夠讀取大部分常規圖片文件,比如JPG、GIF、PNG、TIFF等;
  • 這個筆者也嘗試過,因為現在的圖片驗證碼越來越復雜,其實有時候識別率并不高;
  • 下邊我們嘗試著使用一下。

4.1 識別對象

  • 我們收集了幾個圖片驗證碼(來源于網絡,僅供參考):從左到右依次是image01.jpg-image04.jpg:

    在這里插入圖片描述

現在我也找了很多測試的朋友,做了一個分享技術的交流群,共享了很多我們收集的技術文檔和視頻教程。
如果你不想再體驗自學時找不到資源,沒人解答問題,堅持幾天便放棄的感受
可以加入我們一起交流。而且還有很多在自動化,性能,安全,測試開發等等方面有一定建樹的技術大牛
分享他們的經驗,還會分享很多直播講座和技術沙龍
可以免費學習!劃重點!開源的!!!
qq群號:110685036【暗號:csdn999】

4.2 pytesseract安裝

  • 直接使用命令安裝即可:
pip install Pillow

在這里插入圖片描述

4.3 Pillow安裝

  • 直接使用命令:
pip install Pillow

在這里插入圖片描述

4.4 OCR安裝

  • 直接在下載即可:OCR官網;
  • 選擇對應的版本下載即可:

    在這里插入圖片描述

  • 按照提示安裝完成:

    在這里插入圖片描述

  • 配置環境變量,將其根目錄添加到path環境變量中:

    在這里插入圖片描述

4.5 識別原理

  • 基本思路是通過圖片降噪、圖片切割等,輸出圖像文本;
  • 圖片降噪就是將圖片中一些不需要的信息去除,比如背景、干擾像素、干擾線等。
  • 如果驗證碼是彩色的背景,其實就是把每個像素放在五維空間,即X、Y、R、G、B
  • X、Y是像素的二維平面坐標,RGB代表像素所對應的顏色。

4.6 處理過程

4.6.1 轉灰度處理

  • 導入需要的包:
from PIL import Image
  • 打開需要分析的圖像:
image = Image.open("./image01.jpg")
  • 將彩色圖像轉化為灰度圖像(RGB轉為HSI色彩空間),采用L分量:
# 彩色轉灰度
img_01 = image.convert("L")
img_01.show()
  • 以上完整代碼為(使用image01.jpg):
# 導入Image包
from PIL import Image# 打開圖像
image = Image.open("./image01.jpg")
# 彩色轉灰度
img_01 = image.convert("L")
img_01.show()
  • 轉灰度后圖像如下:

    在這里插入圖片描述

4.6.2 二值化處理

  • 圖像分割常用的方法就是二值化處理;
  • 二值化處理就是二值化圖像時,將大于某個臨界灰度值的像素灰度設置為灰度的極大值,把小于這個值的像素灰度設為灰度的極小值,取值范圍一般為0-1
  • 二值化算法不同,可分固定閾值和自適應閾值,比如這個固定閾值如下(使用image02.jpg):
# 導入Image包
from PIL import Image# 打開圖像
image = Image.open("./image02.jpg")
# 二值化處理
img_02 = image.point(lambda x:0 if x<143 else 255)
img_02.show()
  • 二值化后的效果:

在這里插入圖片描述

  • 我們結合前兩種方法,把image03.jpg先灰度再二值化處理后輸出對應的文字:
# 導入Image包
from PIL import Image
from pytesseract import pytesseract# 打開圖像
image = Image.open("./image03.jpg")# 灰度處理
img_new = image.convert("L")
# 二值化處理
img_03 = img_new.point(lambda x:0 if x<143 else 255)
img_03.show()
out_img = pytesseract.image_to_string(img_03)
print(out_img)
  • image03.jpg原圖和處理后效果:

在這里插入圖片描述

  • 結果輸出:

    在這里插入圖片描述

4.6.3 圖像增強

  • 為了排除更多的干擾,我們可以使用將圖片增強顯示,或者將圖片轉成黑白;
  • 我們在以上代碼繼續添加:
from PIL import ImageEnhanceimg_enh = ImageEnhance.Contrast(img_03)
img_enh01 = img_enh.enhance(4)
img_enh01 .show()out_img = pytesseract.image_to_string(img_enh01)

在這里插入圖片描述

4.6.4 完整代碼

  • 我們使用image04.jpg輸出完整代碼:
# 導入Image包
from PIL import Image
from pytesseract import pytesseract
from PIL import ImageEnhance# 打開圖像
image = Image.open("./image04.jpg")# 灰度處理
img_new = image.convert("L")# 二值化處理
img_04 = img_new.point(lambda x:0 if x<143 else 255)# 圖像增強
img_enh = ImageEnhance.Contrast(img_04)
img_enh01 = img_enh.enhance(4)# 處理后圖片
img_enh01.show()# 提取圖片文字
out_img = pytesseract.image_to_string(img_enh01)
print(out_img)
  • 處理前后的效果:

    在這里插入圖片描述

5 打碼平臺

  • 另外我們可以通過打碼平臺來實現圖片文字提取,比如超人、圖鑒、斐斐等等;
  • 比如圖鑒平臺,可以參考它的開發文檔;

    在這里插入圖片描述

6 記錄cookie

  • 通過添加登錄成功時所攜帶的cookie來跳過登錄;
  • selenium中使用add_cookie()方法將用戶名和密碼等登錄信息寫入瀏覽器的cookie中,再次登錄時直接讀取瀏覽器cookie即可。
  • 此處代碼省略后續添加。

END今天的分享就到此結束了!點贊關注不迷路~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167964.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【點云surface】 修剪B樣條曲線擬合

1 介紹 Fitting trimmed B-splines&#xff08;修剪B樣條曲線擬合&#xff09;是一種用于對給定的點云數據進行曲線擬合的算法。該算法使用B樣條曲線模型來逼近給定的點云數據&#xff0c;并通過對模型進行修剪來提高擬合的精度和準確性。 B樣條曲線是一種常用的曲線表示方法…

【element優化經驗】el-dialog修改title樣式

目錄 前言 解決之路 1.把默認的這個圖標隱藏&#xff0c;官方的api有這個屬性&#xff1a;showClose值設置false. 2.title插槽定制&#xff1a;左邊定制標題&#xff0c;右邊定制按鈕區域。 3.背景顏色修改&#xff1a;默認title是有padding的需要把它重寫調&#xff0c;然…

基于卷積神經網絡CNN開發構建HAR人類行為識別Human Activity Recognition【完整代碼實踐】

行為識別相關的開發實踐在我們之前的博文中也有過相關的實踐了,感興趣的話可以自行移步閱讀即可:《python實現基于TNDADATASET的人體行為識別》 《UCI行為識別——Activity recognition with healthy older people using a batteryless wearable sensor Data Set》《人體行為…

基于 STM32Cube.AI 的嵌入式人臉識別算法實現

本文介紹了如何使用 STM32Cube.AI 工具開發嵌入式人臉識別算法。首先&#xff0c;我們將簡要介紹 STM32Cube.AI 工具和 STM32F系列單片機的特點。接下來&#xff0c;我們將詳細討論如何使用 STM32Cube.AI 工具鏈和相關庫來進行人臉識別算法的開發和優化。最后&#xff0c;我們提…

Netty實現websocket且實現url傳參的兩種方式(源碼分析)

1、先構建基本的netty框架 再下面的代碼中我構建了一個最基本的netty實現websocket的框架&#xff0c;其他個性化部分再自行添加。 Slf4j public class TeacherServer {public void teacherStart(int port) throws InterruptedException {NioEventLoopGroup boss new NioEve…

Day40力扣打卡

打卡記錄 包子湊數&#xff08;裴蜀定理 DP&#xff09; 根據裴蜀定理&#xff0c;存在 c gcd(a, b) 使不定方程ax by c滿足條件&#xff0c;如果gcd(a, b) 1即a與b互素的情況下&#xff0c;就會 ax by 1&#xff0c;由于為1可以構造后面的無窮數字&#xff0c;故得到結…

Centos7 離線安裝 CDH7.1.7

1. 安裝CDH的準備工作&#xff08;所有節點都要執行&#xff09; 1.1 準備環境 角色 IP k8s-master 192.168.181.129 k8s-node1 192.168.181.130 k8s-node2 192.168.181.131 1.2 安裝JDK # https://www.oracle.com/java/technologies/downloads/#java11 wget rpm -ivh…

亞馬遜Listing怎么寫!親身經驗分享

亞馬遜運營的重要環節之一&#xff0c;listing的攥寫&#xff0c;可以決定了產品的搜索排名&#xff0c;用戶的點擊率和轉化率&#xff0c;那么如果你的產品排名或者轉化不理想的情況&#xff0c;可以考慮對listing進行優化&#xff0c;在關鍵詞過多和語句流程通順的情況下&…

js獲取時間日期

目錄 Date 對象 1. 獲取當前時間 2. 獲取特定日期時間 Date 對象的方法 1. 獲取各種日期時間組件 2. 獲取星期幾 3. 獲取時間戳 格式化日期時間 1. 使用 toLocaleString() 方法 2. 使用第三方庫 UNIX 時間戳 內部表示 時區 Date 對象 JavaScript中內置的 Date 對象…

數據挖掘之PCA-主成分分析

PCA的用處&#xff1a;找出反應數據中最大變差的投影&#xff08;就是拉的最開&#xff09;。 在減少需要分析的指標同時&#xff0c;盡量減少原指標包含信息的損失&#xff0c;以達到對所收集數據進行全面分析的目的 但是什么時候信息保留的最多呢&#xff1f;具體一點&#…

?飛凌嵌入式FCU2601網關,為工商業儲能EMS注入智慧的力量

一、火熱的儲能行業&#xff0c;尋求新的市場機會 最近一段時間以來&#xff0c;世界儲能大會、上海儲能展、能源電子產業發展大會等多個儲能相關論壇和展覽密集登場&#xff0c;即使“內卷”已成為了業內討論的熱詞&#xff0c;但尋求新的市場機會仍然是行業共識&#xff0c;…

常用Redis的鍵命令參考

一、DEL DEL key [key …] 刪除給定的一個或多個 key 。 不存在的 key 會被忽略。 #刪除單個鍵127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> del name (integer) 1# 刪除一個不存在的 key&#xff0c; 失敗&#xff0c;沒有 key 被刪除127.0.0.1:6379> E…

Qt C++中調用python,并將軟件打包發布,python含第三方依賴

工作中遇到qt c調用我的python 代碼&#xff0c;并且想要一鍵打包&#xff0c;這里我根據參考的以及個人實踐的結果來簡單實現一下。 環境&#xff1a;windows系統&#xff0c;QT Creater 4.5&#xff0c; python 3.8&#xff08;anaconda虛擬環境&#xff09; 1. 簡單QT調用…

【 Kubernetes 風云錄 】- Istio 應用多版本流量控制

文章目錄 原理實現DeploymentVirtualServiceDestinationRule 約束部署 目的: 根據不同的引擎版本&#xff0c;可以把請求發送到指定的引擎上。可以實現版本降級。 原理 Istio通過VirtualService和DestinationRule兩個資源對象來實現流量管理&#xff0c;其中VirtualService用于…

LeetCode Hot100 98.驗證二叉搜索樹

題目&#xff1a; 給你一個二叉樹的根節點 root &#xff0c;判斷其是否是一個有效的二叉搜索樹。 有效 二叉搜索樹定義如下&#xff1a; 節點的左子樹只包含 小于 當前節點的數。節點的右子樹只包含 大于 當前節點的數。所有左子樹和右子樹自身必須也是二叉搜索樹。 方法一…

electron windows robotjs 安裝教程

Robotjs 安裝 前言第一步 : 安裝python第二步 : 安裝Visual Studio 2022第三步 : 安裝robotjs 前言 robotjs可以控制鼠標鍵盤&#xff0c;獲取屏幕內容&#xff0c;配合electron可做很多自動化操作。windows下配置環境有很多坑&#xff0c;很多文章都太舊了。試了很多次發現了…

ky10 server x86 auditd安裝(日志審計系統)

概述 Auditd工具可以幫助運維人員審計Linux&#xff0c;分析發生在系統中的發生的事情。Linux 內核有用日志記錄事件的能力&#xff0c;包括記錄系統調用和文件訪問。管理員可以檢查這些日志&#xff0c;確定是否存在安全漏洞&#xff08;如多次失敗的登錄嘗試&#xff0c;或者…

golang學習筆記——接口和繼承比較2

接口和繼承 現在有一個需要要求大學生和足球運動員掌握英語技能&#xff0c;請問怎么實現? 給運動員和學生結構體添加studyEnglish方法顯示是可以的&#xff0c;但是籃球動員和中學生也學習了英語&#xff0c;顯示不行。這時&#xff0c;我們可以直接給足球運動員和大學生添加…

跳轉應用市場詳情頁market

關于作者&#xff1a;CSDN內容合伙人、技術專家&#xff0c; 從零開始做日活千萬級APP。 專注于分享各領域原創系列文章 &#xff0c;擅長java后端、移動開發、商業變現、人工智能等&#xff0c;希望大家多多支持。 未經允許不得轉載 目錄 一、導讀二、概覽三、跳轉到各大廠商應…

播放器開發(四):多線程解復用與解碼模塊實現

學習課題&#xff1a;逐步構建開發播放器【QT5 FFmpeg6 SDL2】 前言 根據第一章內容&#xff0c;我們首先可以先把解復用和解碼模塊完成&#xff0c;其中需要使用到多線程以及隊列&#xff0c;還需要使用FFmpeg進行解復用和解碼動作的實現。 創建BaseQueue基類 BaseQueue.h…