知网注册(传统图片验证码识别)

2018-11-14  本文已影响0人  沫明

知网注册(传统图片验证码识别)

灰度化
二值化
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()
上一篇下一篇

猜你喜欢

热点阅读