selenium - 圖形驗證碼


前言:用selenium做UI自動化,遇網站登錄需要驗證碼!?WC...看了很多文章,最終解決不了我的需求,故做一下記錄分享我的解決方法

 

1.主要思路:

①.通過元素定位驗證碼圖片位置

②.使用screenshot方法將驗證碼截圖

③.將圖片亮度對比度調高提高識別精准度

④.使用ddddoc第三方庫識別驗證碼

 

2.元素定位

復制xpath定位驗證碼圖片並截圖命名img.png

img=driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/span')
img.screenshot('E:\\captcha\\img.png')

 

 

3.提高亮度或對比度去除干擾因素

python中PIL模塊中有一個叫做ImageEnhance的類,該類專門用於圖像的增強處理,可以實現圖像的亮度、對比度、色度和銳度四種方式的增強(或減弱)處理。

# -*- coding: UTF-8 -*-
import os
from PIL import Image
from PIL import ImageEnhance
import ddddocr

# 原始圖像
class ImageAugument(object):
    def __init__(self,img_name):
        image = Image.open('E:\\captcha\\'+img_name)
        self.Image = image.convert('L')     #轉化為灰色圖像

        # image.show()

    # 亮度增強
    def Brightness_img(self):
        enh_bri = ImageEnhance.Brightness(self.Image )
        brightness = 1.4
        image_brightened = enh_bri.enhance(brightness)
        image_brightened.save('E:\\captcha\\aa.png')

    # 色度增強
    def Color_img(self):
        enh_col = ImageEnhance.Color(self.Image )
        color = 1.5
        image_colored = enh_col.enhance(color)
        image_colored.save('E:\\captcha\\bb.png')

    # 對比度增強
    def Contrast_img(self):
        enh_con = ImageEnhance.Contrast(self.Image )
        contrast = 1.5
        image_contrasted = enh_con.enhance(contrast)
        image_contrasted.save('E:\\captcha\\cc.png')

    # 銳度增強
    def Sharpness_img(self):
        enh_sha = ImageEnhance.Sharpness(self.Image )
        sharpness = 3.0
        image_sharped = enh_sha.enhance(sharpness)
        image_sharped.save('E:\\captcha\\dd.png')

    # 亮度增強對比度增強
    def Brightness_And_Contrast_img(self):
        enh_bri = ImageEnhance.Brightness(self.Image)
        brightness = 1.4
        image_brightened = enh_bri.enhance(brightness)
        enh_con = ImageEnhance.Contrast(image_brightened)
        contrast = 1.5
        image_contrasted = enh_con.enhance(contrast)
        image_contrasted.save('E:\\captcha\\Ee.png')

if __name__ == '__main__':
    img_x = ImageAugument('img.png')
    img_x.Brightness_And_Contrast_img()

 

具體數值可以通過aa bb cc dd去查看哪張圖驗證碼更清晰,參數可自行調整

 

4.使用第三方庫識別圖片中的驗證碼:

博豬最開始用:pillow+pytesseract;優點是免費,較為易用,但其識別精度一般。

但是!我發現了一個第三方庫,該庫名也是非常有趣 —— ddddocr(諧音帶帶弟弟OCR)

Github地址:https://github.com/sml2h3/ddddocr

環境要求

python >= 3.8

Windows/Linux/Macox..

可以通過pip命令安裝:pip install ddddocr -i https://pypi.douban.com/simple

以下是代碼,五行識別驗證碼

import ddddocr

ocr = ddddocr.DdddOcr()
with open('1.png', 'rb') as f:
    img_bytes = f.read()
res = ocr.classification(img_bytes)

print(res)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM