知網注冊(傳統(tǒng)圖片驗證碼識別)

知網注冊(傳統(tǒng)圖片驗證碼識別)

灰度化
二值化
tesseract提取圖片文字

代碼如下:

        from selenium import webdriver
        import pytesseract
        from PIL import Image
        import time
        
        browser = webdriver.Chrome(r"D:\chromedriver.exe")   #browser瀏覽器
        url = 'http://my.cnki.net/elibregister/commonRegister.aspx'
        browser.get(url)
        html = browser.page_source
        print(html)
        
        user = browser.find_element_by_id('username')
        pwd = browser.find_element_by_id('txtPassword')
        email = browser.find_element_by_id('txtEmail')
        checkCode = browser.find_element_by_id('txtOldCheckCode')
        btnReg = browser.find_element_by_id('ButtonRegister')
        user.send_keys('zzqk08_3@163.com')
        time.sleep(2)
        pwd.send_keys('mimamima')
        time.sleep(2)
        email.send_keys('guojiantao@163.com')
        time.sleep(2)
        
        
        browser.save_screenshot('./images/zhiwang.png')#快照
        img = browser.find_element_by_id('checkcode')
        left   = img.location['x']#驗證碼圖片左上角橫坐標
        top    = img.location['y']#驗證碼圖片左上角縱坐標
        right  = left + img.size['width']#驗證碼圖片右下角橫坐標
        bottom = top + img.size['height']#驗證碼圖片右下角縱坐標
        im=Image.open('./images/zhiwang.png')
        im_crop=im.crop((left,top,right,bottom))#這個im_crop就是從整個頁面截圖中再截出來的驗證碼的圖片
        im_crop.save('./images/zrecaptchar.png')
        
        img =Image.open('./images/zrecaptchar.png')
        # img.show()  #顯示驗證碼圖片
        #可以看出,驗證碼文本一般都是黑色的,背景則會更加明亮,所以我們可以通過檢查像素是否為黑色將文本分離出來,該處理過程又被稱為閾值化。通過 Pillow 可以很容易地實現該處理過程。
        gray = img.convert('L') #灰度化,圖片轉化成灰度圖
        # gray.show() #顯示灰度化后圖片
        #二值化,指定而二值化的閾值,默認閾值127
        threshold = 135
        table = []
        for i in range(256):
            if i < threshold:
                table.append(0)
            else:
                table.append(1)
        bw = gray.point(table,'1')
        # bw.show()  #顯示二值化后圖片
        #bw = gray.point(lambda x: 0 if x < 1 else 255,'1')
        strcode = pytesseract.image_to_string(bw)
        print(strcode)
        
        
        checkCode.send_keys(strcode)
        #模擬點擊按鈕
        btnReg.click()
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容