用python識別驗證碼

2021-01-15 浪晉測試小講堂
前言

經常大家在做自動化測試或者做網絡爬蟲的時候,都很容易遇到驗證碼。
今天,我們就簡單的說下,怎麼用python來處理驗證碼。
(注意:我所有的python相關的文章用的都是python3。)

準備工作1、tesseract-ocr軟體

Tesseract的OCR引擎最先由HP實驗室於1985年開始研發,至1995年時已經成為OCR業內最準確的三款識別引擎之一。然而,HP不久便決定放棄OCR業務,Tesseract也從此塵封。
數年以後,HP意識到,與其將Tesseract束之高閣,不如貢獻給開源軟體業,讓其重煥新生--2005年,Tesseract由美國內華達州信息技術研究所獲得,並求諸於Google對Tesseract進行改進、消除Bug、優化工作。
總之,tesseract-ocr是一個做圖形識別必須用到第一個軟體,不僅可以處理驗證碼,也可以識別圖片上的文字等等。

我已經把軟體上傳了我的網盤,大家可以直接下載,不需要安裝,解壓即可。
下載地址:
連結:https://pan.baidu.com/s/1bpMz3OV 密碼:108a

2、Pytesseract包

Pytesseract是一個python的第三方的包,主要作用就是用來連接操作tesseract-ocr工具。
為我們用python來處理圖形打好了基礎。
可以使用pip工具直接安裝。

3、Pillow包

python的圖形處理庫,用來處理調整圖形的各種內容。
Pillow由PIL而來,所以該導入該庫使用import PIL。
Pillow中最重要的類就是Image,該類存在於同名的模塊中。可以通過以下幾種方式實例化:從文件中讀取圖片,處理其他圖片得到,或者直接創建一個圖片。
可以使用pip工具直接安裝。

配置環境第一步、把Tesseract-OCR添加到環境變量。

我們下載好Tesseract-OCR後,直接將其解壓,然後把所在路徑添加到環境變量中。
如圖所示:



複製路徑:D:\Program Files\Tesseract-OCR
添加到環境變量PATH中



第二步、安裝Pytesseract和Pilllow包

打開cmd,使用pip工具依次安裝Pytesseract和Pilllow包
如圖所示:



第三步、檢查是否安裝成功

1、檢查tesseract-ocr
打開cmd,輸入tesseract



2、檢查Pytesseract和Pillow包
在python裡導入試試吧,沒有報錯,那就說明成功了。



OK!沒問題,說明我們已經安裝成功了,那我們就開始寫代碼了。

識別驗證碼

要識別驗證碼,那我們首先就要獲取驗證碼。
我一般有兩種常用的方式去獲取驗證碼。
第一種是通過接口保存驗證碼。
第二種是通過截圖保存驗證碼。
我們依次說明。

1、通過接口保存驗證碼並識別。

通過接口去獲取的話,我們是需要藉助requests這個包的。
這裡我們主要講識別驗證碼,requests我會在其他文章裡詳細的說明。

import requestsimport pytesseractfrom PIL import Image'''調用接口請求驗證碼,保存到本地,識別驗證,檢查識別的驗證碼對不對。'''url = hurl + "/file/getCaptcha1"headers = Nonequerystring = {"w": "70", "h": "29"}response = requests.request("GET", url, headers=headers, params=querystring, verify=False)img = response.contentwith open('F:\MyPython\TestCode\data\code.jpg', 'wb') as f:        f.write(img)image = Image.open('F:\MyPython\TestCode\data\code.jpg')optCode = pytesseract.image_to_string(image)print("驗證碼:", optCode)

2、通過截圖保存驗證碼並識別。

要截圖的話肯定需要界面,那麼我們就需要藉助selenium去操作了。
selenium這裡也不講,大家應該都會吧。

import pytesseractfrom PIL import Imagefrom selenium import webdriver'''調用接口請求驗證碼,保存到本地,識別驗證,檢查識別的驗證碼對不對。'''driver = webdriver.Chrome()打開有驗證碼的界面driver.get("https://www.XXXX.com/login")driver.get_screenshot_as_file('F:/VScode/LoarRunner/Vcode/homepage.png')im = Image.open('F:/VScode/LoarRunner/Vcode/homepage.png')box = (1214, 82, 1285, 111)region = im.crop(box)region.save("F:/VScode/LoarRunner/Vcode/image_code.jpg")image = Image.open("F:/VScode/LoarRunner/Vcode/image_code.jpg")optCode = pytesseract.image_to_string(image)print(optCode)

總結

簡單的來說,識別圖片,驗證碼,文字啊,都可以這樣子操作。
但是驗證碼的處理遠遠沒有這麼簡單。
畢竟啊,現在的驗證碼是越來越變態。
希望大家可以靈活應用圖形處理方法。
可以嘗試下識別照片上的文字什麼的。


相關焦點

  • Python驗證碼識別:利用pytesser識別簡單圖形驗證碼
    三、一般思路驗證碼識別的一般思路為:1、圖片降噪2、圖片切割3、圖像文本輸出3.1 圖片降噪所謂降噪就是把不需要的信息通通去除,比如背景,幹擾線,幹擾像素等等,只剩下需要識別的文字,讓圖片變成2進位點陣最好。
  • mac使用python識別圖形驗證碼!
    在網上查了很多版本的圖形驗證碼識別,目前看到最多的兩個模塊是pytesseract和tesserocr,但是因為我這裡安裝tesserocr的時候各種出錯,所以最終我鎖定了使用pytesseract。那麼接下來,就記錄下安裝以及使用過程。這裡的系統環境是mac os 10.14.
  • 使用Python和Tesseract來識別圖形驗證碼
    >至此,進行圖形驗證碼識別的依賴環境都已準備好,我們可以開幹了。下面以我工作中遇到過的一些驗證碼為例:有5組,均來自於我公司的不同業務網站。識別代碼請參看我項目目錄下decaptcha_demo.py文件,所有的示例驗證碼放在images目錄下。大家可以用圖片編輯器打開相關的驗證碼文件觀察和分析像素的規律。
  • 驗證碼識別實例,python簡單圖像處理和實現
    基本識別原理概述:1、每一幅圖像在構成上,都是由一個個像素組成的矩陣,每一個像素為單元格。2、 彩色圖像的像素的由三原色(紅,綠,藍)構成元組,灰度圖像的像素是一個單值,每個像素的值範圍為(0,255)。
  • 用Python識別圖形驗證碼,實現自動登陸!
    驗證碼有圖形驗證碼、極驗滑動驗證碼、點觸驗證碼、宮格驗證碼。這回重點講講圖形驗證碼的識別。雖說圖形驗證碼最簡單,但是對於我這等新手,還是要苦學一番。首先尋找測試網站,網站選的是如雲閣小說網,小網站不怕被封。他
  • 能跑源碼,還提供數據集:這裡有一個入門企業級驗證碼識別項目
    原創 機器之心 機器之心機器之心專欄作者:kerlomz網上關於驗證碼識別的開源項目眾多,但大多是學術型文章或者僅僅是一個測試 demo,那麼企業級的驗證碼識別究竟是怎樣的呢?
  • Python3網絡爬蟲課程 8.1圖形驗證碼的識別
    目前,很多網站都採取了各種各樣的反爬措施,其中之一便是使用驗證碼.隨著技術的發展,驗證碼卻來越複雜,花樣越來越多,爬蟲的工作也變得愈加複雜,本節將介紹圖形驗證碼的識別.圖形驗證碼我們首先將識別最簡單的驗證碼,圖形驗證碼.目標我們將以知網為例講解使用 OCR 技術識別圖形驗證碼.
  • 12306圖形驗證碼讓人"吐槽" 驗證碼到底有什麼用
    在年底的網絡購票高峰中,中國鐵路客戶服務中心的12306圖形驗證碼系統被很多購票者「吐槽」。人們不禁要問,複雜的驗證碼系統,到底有什麼用?其實,驗證碼存在的最大意義,就是區分在頁面上進行輸入操作的是人還是自動化的軟體。
  • Python3網絡爬蟲課程 8.2極驗滑動驗證碼的識別
    上一節了解了簡單驗證碼的識別,但是現在這種驗證碼非常少見,現在出現了一大批新型的驗證碼,如極驗滑動驗證碼,它需要拖動合併滑塊才能完成識別。目標本節目標是識別極驗滑動驗證碼,如分析思路、識別缺口、生成拖動路徑、模擬合併等。
  • 12306網站驗證碼遭拍磚 「驗證碼」本意是安全不是麻煩
    北京郵電大學信息與通信工程學院教授牛凱說,理論上,只有真人才能通過推理分析驗證碼圖片中的字符。隱蔽在雜亂背景中的扭曲字母,通過細緻觀察,人眼可以較準確辨識,而採用計算機識別準確率較低。  牛凱介紹,一般而言,驗證碼包括3類:文本驗證碼、語音驗證碼和圖像驗證碼。其中,文本驗證碼又可以細分為在線識別文本與線下識別文本。
  • 最全的 Python 反爬蟲及應對方案!
    驗證碼驗證碼是一種區分用戶是計算機還是人的公共全自動程序。可以防止:惡意破解密碼、刷票、論壇灌水,有效防止某個黑客對某一個特定註冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試,實際上用驗證碼是現在很多網站通行的方式.圖片驗證碼複雜型打碼平臺僱傭了人力,專門幫人識別驗證碼。識別完把結果傳回去。總共的過程用不了幾秒時間。這樣的打碼平臺還有記憶功能。
  • Python3爬蟲-10:Tesseract 圖像識別
    「人生苦短,快用Python」在爬蟲過程中,經常會遇到各種驗證碼
  • python|圖像識別
    影響力之大和最吸引人的技術就是圖像識別,圖像識別技術是人工智慧的一個重要領域,它是指利用計算機對圖像進行處理、分析和理解,以識別各種不同模式的目標和對象的技術。今天以女神宋慧喬的兩張不同照片為例,利用python識別其相似度,從而判定是否是同一人,同時讓我們對圖像識別有個初步的了解,什麼?照片可以換蒼老師和波老師嗎?我懷疑你們在開車,可是我沒有證據!
  • ...識別的虹膜掃描沒啥用;谷歌開發人機驗證新技術:終於告別驗證碼...
    三星承認缺少面部識別的虹膜掃描沒啥用MacX在三星 Galaxy Note 7 發布之前,三星曾炫耀其全新雙生物識別 ID不過,三星現在開始承認缺少了面部識別的虹膜掃描是沒用的。三星電子的官員在近日表示,「我們決定為 Galaxy S8 搭載面部識別功能,因為虹膜識別的準確率和識別速度都很有限。如果加入面部識別的話,解鎖手機僅需要 0.01 秒」。而蘋果也一直被傳出將在秋季的新款 5.8 吋 iPhone 上推出這一功能,所以圍繞面部識別的新一輪軍備競賽已經開始。
  • 路易斯·馮·安 驗證碼之父
    我們在使用網際網路的過程中,可以看到網站往往會通過驗證碼來辨別用戶是否是機器人,驗證碼實際上就是人類和計算機的一場戰爭。但有時候你會發現,驗證碼也是讓人感到十分無奈。驗證碼嚴重扭曲到不能通過人眼來識別,有的太過於花樣,驗證碼隱藏太深,看起來卻十分的吃力。
  • 復旦大學肖仰華:12306的驗證碼已不再安全,未來屬於智能驗證碼
    對於ComplexImage這種相對複雜的驗證碼,機器識別的準確率高達98%-99.8%。在人機對比實驗裡,人大概10個裡面要錯3個,機器10個裡面只錯了1個,基本上是機器完敗人類。網際網路上的很多平臺目前還嚴重依賴這類驗證碼,以為能夠防止刷單、刷票等等,但是事實上並不安全。傳統驗證碼可以說已經十分不安全。比如上圖中拖拽驗證碼,已經可以通過自動化程序來破解。
  • python人工智慧-圖像識別
    pytesseract:圖像識別庫。我這裡使用的是python3.6,PIL不支持python3所以使用如下命令pip install pytesseractpip install pillow如果是python2,則在命令行執行如下命令:pip install pytesseractpip install PIL這時候我們去運行上面的代碼會發現如下錯誤
  • 圖形驗證碼難防黃牛 今年網購車票超8成無驗證碼
    圖形驗證碼難防黃牛 今年網購車票超8成無驗證碼 原標題: 中國鐵路總公司表示,今年春運網絡購票需要驗證碼的比例將被壓縮到15%以下。昨天,老牌搶票軟體360瀏覽器表示通過大數據分析,今年春運搶票初期,12306的圖形驗證碼並沒有比去年增加難度,他們發現圖形驗證碼已經不是鐵路防止黃牛倒票的主要技術手段,鐵路正在通過更加嚴格的實名認證等其他方式來防黃牛,提高了用戶的購票體驗。
  • 被破譯的驗證碼:新算法破譯驗證碼的成功率已達99%,Google不得不...
    對於用街景車採集地圖信息的Google來說,怎麼讓機器看懂每家風格和字體都不同的門牌號是個問題,因此衍生出了Google的圖像識別算法——據Google在近幾天的ICL上更新的paper來看,Google在這方面的識別精確率已達到90%以上。
  • 12306將剔除辨識率低圖形驗證碼
    網上甚至還流傳一些「奇葩」驗證碼的帖子,列舉出識別明星臉、罕見物品等刁鑽問題。  昨日,中國鐵道科學研究院電子計算技術研究所副所長朱建生表示,12306購票系統沒有所謂「識別明星臉」的「奇葩」驗證碼,網上流傳的刁鑽問題大多子虛烏有。「我們決不會讓旅客分辨『橘子』和『橙子』。」朱建生說。  不過,也有一些網友表示,驗證碼清晰度不高,導致放票時間連續選錯,從而錯過了購票。