python識別驗證碼圖片
1. python+selenium+pytesseract識別圖片驗證碼
selenium結合python進行驗證碼識別,主要步驟分為三部分:使用selenium截取驗證碼,安裝並驗證識別環境pytesseract與Tesseract-OCR,以及處理驗證碼圖片以提高識別率。在直接截圖的驗證碼圖片中,噪點或干擾線可能導致pytesseract無法識別。若環境配置正確但識別失敗,需檢查圖片處理是否到位。
在圖片處理階段,目的是通過調整圖片以滿足識別要求。調整過程中,利用`im.show()`函數展示每一步處理後的圖片,確保處理方向符合預期。處理時需靈活調整參數,以適應不同驗證碼的樣式。
有經驗者分享,通過調整圖片大小來提升識別率,方法為使用Python的cv2庫中的`resize()`函數放大圖片。此方法對於某些情況下提高識別准確性有顯著效果,但需注意調整大小時保持圖片清晰度。
總結而言,驗證碼識別流程涉及截取、環境配置與圖片處理。通過細致的圖片處理,結合正確的識別環境設置,能有效提升驗證碼識別的成功率。在實際應用中,需根據驗證碼的具體特點調整處理策略,以達到最佳識別效果。
2. python如何識別驗證碼
我們首先識別最簡單的一種驗證碼,即圖形驗證碼。這種驗證碼最早出現,現在也很常見,一般由4位字母或者數字組成。例如,中國知網的注冊頁面有類似的驗證碼,頁面如下所示:
表單中最後一項就是圖形驗證碼,我們必須完全正確輸入圖中的字元才可以完成注冊。
更多有關驗證碼的知識,可以參考這些文章:
Python3爬蟲進階:識別圖形驗證碼
Python3爬蟲進階:識別極驗滑動驗證碼
Python3爬蟲進階:識別點觸點選驗證碼
Python3爬蟲進階:識別微博宮格驗證碼
·本節目標以知網的驗證碼為例,講解利用OCR技術識別圖形驗證碼的方法。
·准備工作識別圖形驗證碼需要庫tesserocr,以mac安裝為例:在mac下,我們首先使用Homebrew安裝ImageMagick和tesseract庫: brew install imagemagickbrew install tesseract 接下來再安裝tesserocr即可:pip3 install tesserocr pillow這樣我們就完成了 tesserocr的安裝。
·獲取驗證碼為了便於實驗,我們先將驗證碼的圖片保存到本地。打開開發者工具,找到驗證碼元素。驗證碼元素是一張圖片,它的ser屬 性是CheckCode.aspk。所以我們直接打開如下鏈接就可以看到一個驗證碼,右鍵保存即可,將其命名為code.jpg:
這樣我們就得到一張驗證碼圖片,以供測試識別使用。
相關推薦:《Python教程》
識別測試
接下來新建一個項目,將驗證碼圖片放到項目根目錄下,用tesserocr庫識別該驗證碼,代碼如下所示:
這里我們新建了一個Image對戲那個,調用了tesserocr的image_to_text( )方法。傳入該Image對象即可完成識別,實現過程非常簡單,結果如下:
我們可以看到,識別的結果和實際結果有偏差,這是因為驗證碼內的多餘線條干擾了圖片的識別。
另外,tesserocr還有一個更加簡單的方法,這個方法可以直接將圖片文件轉為字元串,代碼如下:
不過這種方法的識別效果不如上一種的好。
驗證碼處理
對於上面的圖片,我們可以看到其實並沒有完全識別正確,所以我們需要對圖像作進一步的處理,如灰度轉換、二值化等操作。
我們可以利用Image對象的convert( )方法參數傳入L,即可將圖片轉化為灰度圖像,代碼如下:
傳入1即可將圖片進行二值化處理,如下所示:
我們還可以指定二值化的閾值。上面的方法採用的是默認閾值127。不過我們不能直接轉化原圖,要將原圖先轉化為灰度圖像,然後再指定二值化閾值,代碼如下:
在這里,變數threshold代表二值化閾值,閾值設置為160,之後我們來看看我們的結果:
我們可以看到現在的二維碼就比較方便我們進行識別了;那麼對於一些有干擾的圖片,我們做一些灰度和二值化處理,這會提高圖片識別的正確率。
3. python+appium 自動化測試 - 獲取簡訊 + 圖片驗證碼
自動獲取簡訊驗證碼和圖片驗證碼是 Python+Appium 自動化測試中的常見任務,本文將重點介紹如何實現這一功能,並以微博找回密碼為例進行演示。
獲取簡訊驗證碼的方法有三種,但本文將主要介紹第一種方法:通過在通知欄中獲取簡訊內容。首先,確保手機應用與測試框架的兼容性。導入並聲明 WebDriver 庫下的 webdriver 類,將 driver 聲明為 webdriver,這樣代碼可以順利執行。在通知欄中定位到簡訊內容,然後將獲取到的內容填入驗證碼輸入框。
接下來,介紹獲取圖片驗證碼的方法。通過網路的 OCR 文字識別技術,可以識別圖片中的字母、文字或數字驗證碼。在調用網路 OCR 圖片識別前,需要先申請網路通用文字識別介面,並下載對應語言的 SDK 文件。詳細步驟包括登錄網路 AI 平台、申請介面、查看 SDK 下載鏈接,以及安裝和使用 SDK。在工程中自動創建存放圖片的文件夾,定點陣圖片驗證碼控制項,截取圖片並保存在指定文件夾內。使用 OCR 技術識別圖片中的驗證碼,並將其輸入到驗證碼輸入框中。
在執行過程中需要注意,圖片的命名應遵循一定的規則,以便後續查找和核對。圖片保存在本地工程目錄下方而非磁碟,以避免用戶在運行代碼時需要手動調整路徑。此外,還提供了截圖和 OCR 識別的 Python 示例代碼,以及一個解析圖片驗證碼的腳本,用於處理 OCR 返回的字典並提取所需信息。
最後,為幫助讀者在求職季節找到滿意的工作,本文附上了軟體測試面試題合集和學習資料包,以助大家順利沖刺金三銀四。
4. 用python如何直接獲取jsp生成的驗證碼圖片
你只需要正常請求圖片就行了,分析一下image的src,把它拼接成一個完整的URL去請求就好了,得到的有可能是BASE64編碼串,或者是文件,把它保存下來就可以了。
5. python抓取網頁時是如何處理驗證碼的
python抓取網頁時是如何處理驗證碼的?下面給大家介紹幾種方法:
1、輸入式驗證碼
這種驗證碼主要是通過用戶輸入圖片中的字母、數字、漢字等進行驗證。如下圖:
解決思路:這種是最簡單的一種,只要識別出裡面的內容,然後填入到輸入框中即可。這種識別技術叫OCR,這里我們推薦使用Python的第三方庫,tesserocr。對於沒有什麼背影影響的驗證碼如圖2,直接通過這個庫來識別就可以。但是對於有嘈雜的背景的驗證碼這種,直接識別識別率會很低,遇到這種我們就得需要先處理一下圖片,先對圖片進行灰度化,然後再進行二值化,再去識別,這樣識別率會大大提高。
相關推薦:《Python入門教程》
2、滑動式驗證碼
這種是將備選碎片直線滑動到正確的位置,如下圖:
解決思路:對於這種驗證碼就比較復雜一點,但也是有相應的辦法。我們直接想到的就是模擬人去拖動驗證碼的行為,點擊按鈕,然後看到了缺口的位置,最後把拼圖拖到缺口位置處完成驗證。
第一步:點擊按鈕。然後我們發現,在你沒有點擊按鈕的時候那個缺口和拼圖是沒有出現的,點擊後才出現,這為我們找到缺口的位置提供了靈感。
第二步:拖到缺口位置。
我們知道拼圖應該拖到缺口處,但是這個距離如果用數值來表示?
通過我們第一步觀察到的現象,我們可以找到缺口的位置。這里我們可以比較兩張圖的像素,設置一個基準值,如果某個位置的差值超過了基準值,那我們就找到了這兩張圖片不一樣的位置,當然我們是從那塊拼圖的右側開始並且從左到右,找到第一個不一樣的位置時就結束,這是的位置應該是缺口的left,所以我們使用selenium拖到這個位置即可。
這里還有個疑問就是如何能自動的保存這兩張圖?
這里我們可以先找到這個標簽,然後獲取它的location和size,然後 top,bottom,left,right = location['y'] ,location['y']+size['height']+ location['x'] + size['width'] ,然後截圖,最後摳圖填入這四個位置就行。
具體的使用可以查看selenium文檔,點擊按鈕前摳張圖,點擊後再摳張圖。最後拖動的時候要需要模擬人的行為,先加速然後減速。因為這種驗證碼有行為特徵檢測,人是不可能做到一直勻速的,否則它就判定為是機器在拖動,這樣就無法通過驗證了。
3、點擊式的圖文驗證和圖標選擇
圖文驗證:通過文字提醒用戶點擊圖中相同字的位置進行驗證。
圖標選擇: 給出一組圖片,按要求點擊其中一張或者多張。借用萬物識別的難度阻擋機器。
這兩種原理相似,只不過是一個是給出文字,點擊圖片中的文字,一個是給出圖片,點出內容相同的圖片。
這兩種沒有特別好的方法,只能藉助第三方識別介面來識別出相同的內容,推薦一個超級鷹,把驗證碼發過去,會返回相應的點擊坐標。
然後再使用selenium模擬點擊即可。具體怎麼獲取圖片和上面方法一樣。
4、宮格驗證碼
這種就很棘手,每一次出現的都不一樣,但是也會出現一樣的。而且拖動順序都不一樣。
但是我們發現不一樣的驗證碼個數是有限的,這里採用模版匹配的方法。我覺得就好像暴力枚舉,把所有出現的驗證碼保存下來,然後挑出不一樣的驗證碼,按照拖動順序命名,我們從左到右上下到下,設為1,2,3,4。上圖的滑動順序為4,3,2,1,所以我們命名4_3_2_1.png,這里得手動搞。當驗證碼出現的時候,用我們保存的圖片一一枚舉,與出現這種比較像素,方法見上面。如果匹配上了,拖動順序就為4,3,2,1。然後使用selenium模擬即可。