自動化測試實踐之Python識別驗證碼

2021-02-13 測試之道

來源:  j_hao104

my.oschina.net/jhao104/blog/647326

文末有福利~

一、探討

識別圖形驗證碼可以說是做爬蟲的必修課,涉及到計算機圖形學,機器學習,機器視覺,人工智慧等等高深領域……

簡單地說,計算機圖形學的主要研究內容就是研究如何在計算機中表示圖形、以及利用計算機進行圖形的計算、處理和顯示的相關原理與算法。圖形通常由點、線、面、體等幾何元素和灰度、色彩、線型、線寬等非幾何屬性組成。計算機涉及到的幾何圖形處理一般有 2維到n維圖形處理,邊界區分,面積計算,體積計算,扭曲變形校正。對於顏色則有色彩空間的計算與轉換,圖形上色,陰影,色差處理等等。

在破解驗證碼中需要用到的知識一般是 像素,線,面等基本2維圖形元素的處理和色差分析。常見工具為:

支持向量機(SVM)

OpenCV

圖像處理軟體(Photoshop,Gimp…)

Python Image Library


二、PIL安裝

PIL: Python Imaging Library, 是Python平臺的圖像處理標準庫,功能非常強大。

在Debian/Ubantu Linux下直接通過apt安裝:

$sudo apt-get install python-imaging

Max和其他版本的Linux可以直接使用easy_install或pip安裝,安裝前需要把編譯環境裝好:

$ sudo easy_install PIL

Windos平臺可以直接去PIL官網下載exe安裝包。http://pythonware.com/products/pil/

註:官網提供的安裝包是32位的,63位系統請前往這裡 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pillow 下載替代包pillow。


三、一般思路

驗證碼識別的一般思路為:

1、圖片降噪

2、圖片切割

3、圖像文本輸出

3.1 圖片降噪

所謂降噪就是把不需要的信息通通去除,比如背景,幹擾線,幹擾像素等等,只剩下需要識別的文字,讓圖片變成2進位點陣最好。

對於彩色背景的驗證碼:每個像素都可以放在一個5維的空間裡,這5個維度分別是,X,Y,R,G,B,也就是像素的坐標和顏色,在計算機圖形學中,有很多種色彩空間,最常用的比如RGB,印刷用的CYMK,還有比較少見的HSL或者HSV,每種色彩空間的維度都不一樣,但是可以通過公式互相轉換。在RGB空間中不好區分顏色,可以把色彩空間轉換為HSV或HSL。色彩空間參見 http://baike.baidu.com/view/3427413.htm

驗證碼圖片7039.jpg:

1、導入Image包,打開圖片:

from PIL import Image

im = Image.open('7039.jpg')

2、把彩色圖像轉化為灰度圖像。RBG轉化到HSI彩色空間,採用I分量:

imgry = im.convert('L')

imgry.show()

灰度看起來是這樣的:

3、二值化處理

二值化是圖像分割的一種常用方法。在二值化圖象的時候把大於某個臨界灰度值的像素灰度設為灰度極大值,把小於這個值的像素灰度設為灰度極小值,從而實現二值化(一般設置為0-1)。根據閾值選取的不同,二值化的算法分為固定閾值和自適應閾值,這裡選用比較簡單的固定閾值。

把像素點大於閾值的設置,1,小於閾值的設置為0。生成一張查找表,再調用point()進行映射。

threshold = 140

table = []

for i in range(256):

    if i < threshold:

        table.append(0)

    else:

        table.append(1)

out = imgry.point(table, '1')

out.show()

處理結果看起來是這樣的:

3.2 圖片切割

識別驗證碼的重點和難點就在於能否成功分割字符,對於顏色相同又完全粘連的字符,比如google的驗證碼,目前是沒法做到5%以上的識別率的。不過google的驗證碼基本上人類也只有30%的識別率。本文使用的驗證碼例子比較容易識別。可以不用切割,有關圖片切割的方法參見這篇博客:http://www.cnblogs.com/apexchu/p/4231041.html


四、利用pytesser模塊實現識別

pytesser是谷歌OCR開源項目的一個模塊,在python中導入這個模塊即可將圖片中的文字轉換成文本。

連結:https://code.google.com/p/pytesser/

pytesser 調用了 tesseract。在python中調用pytesser模塊,pytesser又用tesseract識別圖片中的文字。

4.1 pytesser安裝

如果沒有安裝PIL,請到這裡下載安裝:http://www.pythonware.com/products/pil/

安裝pytesser,下載地址:http://code.google.com/p/pytesser/ ,下載後直接將其解壓到項目代碼下,或者解壓到python安裝目錄的Libsite-packages下,並將其添加到path環境變量中,不然在導入模塊時會出錯。

下載Tesseract OCR engine:http://code.google.com/p/tesseract-ocr/  ,下載後解壓,找到tessdata文件夾,用其替換掉pytesser解壓後的tessdata文件夾即可。

另外如果現在都是從PIL庫中運入Image,沒有使用Image模塊,所以需要把pytesser.py中的import Image改為from PIL import Image, 其次還需要在pytesser文件夾中新建一個__init__.py的空文件。

ps:如果覺得後面兩步比較麻煩,可以直接到雲盤中下載    http://yun.baidu.com/s/1jHJvNiI ,操作如步驟2。

4.2 調用pytesser識別

pytesser提供了兩種識別圖片方法,通過image對象和圖片地址,代碼判斷如下:

from PIL import Image

from pytesser import pytesser

image = Image.open('7039.jpg')

print pytesser.image_file_to_string('7039.jpg')

print pytesser.image_to_string(image)

同時pytesser還支持其他語言的識別,比如中文。具體參見:http://blog.csdn.net/hk_jh/article/details/8961449

相關焦點

  • Python驗證碼識別:利用pytesser識別簡單圖形驗證碼
    三、一般思路驗證碼識別的一般思路為:1、圖片降噪2、圖片切割3、圖像文本輸出3.1 圖片降噪所謂降噪就是把不需要的信息通通去除,比如背景,幹擾線,幹擾像素等等,只剩下需要識別的文字,讓圖片變成2進位點陣最好。
  • 【收藏乾貨】基於Appium、Python的自動化測試環境部署和實踐
    1 導言1.1 編制目的該文檔為選用Appium作為行動裝置原生(Native)、混合(Hybrid)、移動Web(Mobile Web)應用UI自動化測試的相關自動化測試人員、開發人員等提供參考。1.2 預期讀者自動化測試人員、測試代表、開發人員等。
  • Python模擬登陸豆瓣自動評論並自動識別驗證碼
    基本開發環境 Python 3.6 Pycharm Selenium Selenium 是一個 Web 的自動化測試工具,最初是為網站自動化測試而開發的,就像玩遊戲用的按鍵精靈,可以按指定的命令自動操作。
  • 使用Python+Tensorflow的CNN技術快速識別驗證碼
    目前,在圖像識別和視覺分析研究中,卷積神經網絡(CNN)技術的使用越來越多。Tensorflow 是由 Google 團隊開發的神經網絡模塊,短短幾年間, 就已經有很多次版本的更新。最近我也在自學Tensorflow,想通過卷積神經網絡快速識別整塊驗證碼(不分割字符)。期間也碰到許多問題,諸如軟體安裝,Tensorflow版本差異等。
  • 技術中臺之DevOps自動化測試實踐
    Devops作為技術中臺的重要組成部分之一,其下「自動化測試」功能也是不可或缺的一環,如何結合DevOps自身提供的自動化測試功能,做好DevOps的接口自動化呢?首先要先了解DevOps為自動化測試提供了哪些功能,如何使用該功能進行自動化測試,以及如何設計測試框架等等,本文將會為大家一一解答。
  • 用於全棧自動化測試的最佳Python工具!
    那麼,您可以使用哪些最好的Python庫來幫助您進行測試和自動化工作呢?以下是我過去的受訪者最喜歡的一些Python自動化庫,以及一些我個人認為有用的庫。  但是首先,如果您正在尋找一種快速學習如何開始使用Python的方法,那麼您應該查看Andrew Knight在自動化協會的會議,了解如何開始使用Python進行測試。在檢查以下python測試庫之前,這將是一個很好的開始。
  • 01 | 圖形驗證碼的識別
    隨著技術的發展,驗證碼的花樣越來越多。驗證碼最初幾個數字組合的簡單的圖形驗證碼,後來加入了英文字母和混淆曲線。有的網站還能看到中文驗證碼,這使得識別語法困難。以下為 12306 驗證碼示例圖:本系列文章將逐步分享普通圖形驗證碼、極驗滑動驗證碼、點觸驗證碼、微博宮格驗證碼,這些驗證碼的識別方式和思路各有不同。
  • 繞過驗證碼
    推薦了使用cnn+tensorflow的方法對同樣類別的驗證碼進行訓練和識別,然後調用burp的插件對識別接口的調用和用於實際中的爆破。現在也有對圖形驗證碼識別的工具,比如BAT和其他的公司OCR,但是在批量爆破中免費次數不夠,不能白嫖就失去了意義。而且調用別人的接口沒有自己的記憶,還要給錢,就顯得很沒有牌面。
  • TensorFlow自動識別驗證碼(一)
    0x000 前言最近看到一篇關於 Burp Suite插件的推送【reCAPTCHA】一款識別圖形驗證碼的Burp Suite插件
  • 實戰 | UI 調度自動化測試平臺(基於 Python)
    測試開發之 UI 自動化測試平臺最佳實踐,進階學習文末加群!
  • 圖形驗證碼繞過新姿勢之深度學習與burp結合
    如果驗證碼不存在繞過漏洞,我們想爆破用戶名或者密碼,又必須填寫正確的驗證碼,這時候該怎麼處理呢?這裡首先感謝亮哥幫助和思路。推薦了使用cnn+tensorflow的方法對同樣類別的驗證碼進行訓練和識別,然後調用burp的插件對識別接口的調用和用於實際中的爆破。
  • 驗證碼識別實例,python簡單圖像處理和實現
    問題來源某系統門戶登陸界面如下:現在我們要實現自動的驗證碼識別。因此,取得了驗證碼識別路上的第一步,結果:把圖像裁剪成6個不同的部分,每個部分的寬度為30像素。python圖像裁剪我們璇兒Python作為原型語言,因為它的庫最容易使用和部署。
  • uiautomator2+python自動化測試1-環境準備
    前言uiautomator是Google提供的用來做安卓自動化測試的一個Java庫。功能很強,可以對第三方App進行測試,獲取屏幕上任意一個APP的任意一個控制項屬性,並對其進行任意操作,但有兩個缺點:測試腳本只能使用Java語言測試腳本必須每次被上傳到設備上運行。
  • OCR識別技術與圖形驗證碼
    較以前技術較為落後,由於識別率及產品化等多方面的因素,導致技術緩慢,但隨著信息自動化和辦公自動化的普及,進一步推動了OCR技術的進一步發展,有關於依靠該技術的產品猶如雨後春筍般出現。我們要從一副圖片中,識別出驗證碼;從一副圖片中,檢測並識別出一張人臉。大概有哪些步驟呢?1.圖像採集:驗證碼呢,就直接通過HTTP抓HTML,然後分析出圖片的url,然後下載保存就可以了。如果是人臉檢測識別,一般要通過視屏採集設備,採集回來,通過A/D轉操作,存為數字圖片或者視頻頻。
  • 從小白變高手,這7個超實用的Python自動化測試框架請收好!
    隨著技術的進步和自動化技術的出現,市面上出現了一些自動化測試框架。只需要進行一些適用性和效率參數的調整,這些自動化測試框架就能夠開箱即用,大大節省了開發時間。而且由於這些框架被廣泛使用,他們具有很好的健壯性,並且具有廣泛多樣的用例集和技術來輕易發現微小的缺陷。今天,我們將看一看常見的 Python 自動化測試框架。
  • Python|自動化測試與if __name__==「__main__」
    問題描述最近有小夥伴在學習python自動化測試的時候遇到了一個問題,下面我直接奉上代碼。解決方案若要讓此程序執行很簡單只需在最後一行代碼unittest.main()前加一行代碼if__name__==」__main__」:方可執行。
  • APP UI自動化測試思路總結
    接下來,一起總結一下APP UI自動化測試的思路吧。一,開發語言選擇通常用於自動化測試的程式語言有:Python、Java、Javascript、Ruby、C#、PHP等。一般我們會選擇自己熟悉的程式語言來編寫自動化腳本,但對於編程基礎基本為0的童鞋(或者專注於做自動化測試的童鞋),推薦學習使用Python。
  • Python 題庫自動化面試題
    10、怎麼提高Selenium腳本的執行速度 11、怎麼對含有驗證碼的功能進行自動化測試的 12、怎麼驗證複選按鈕是不是被選中 13、如何處理 alert 彈窗? 14、下拉菜單中如何去選擇一個菜單項?
  • Windows-UI自動化:如何選擇合適的測試框架
    相信只要了解過一點UI自動化測試的朋友,一定不會對Appium感到陌生。作為移動端UI自動化界的元老和王者,appium幾乎是所有UI自動化測試和UI自動化框架嵌套的首選。AirtestProject是由網易遊戲推出的一款自動化測試框架,項目構成如下:Airtest:是一個跨平臺的、基於圖像識別的UI自動化測試框架
  • APP UI自動化測試,思路全總結在這裡了
    首先想要說明一下,APP自動化測試可能很多公司不用,但也是大部分自動化測試工程師、高級測試工程師崗位招聘信息上要求的,所以為了更好的待遇,我們還是需要花時間去掌握的,畢竟誰也不會跟錢過不去。接下來,一起總結一下APP UI自動化測試的思路吧。通常用於自動化測試的程式語言有:Python、Java、Javascript、Ruby、C#、PHP等。