图片验证码处理、网页快照、截图验证码、灰度化二值化、 图像增强

2019-02-19  本文已影响0人  沫明
    '''
    图片验证码处理
    
    网页快照browser.save_screenshot()
    截图验证码
    灰度化二值化
    
    图像增强
    img1 = ImageEnhance.Sharpness(img).enhance(10) #图像增强
    '''
    
    from selenium import webdriver
    import pytesseract
    from PIL import Image
    import time
    
    browser = webdriver.PhantomJS(r'D:\phantomjs-2.1.1-windows\bin\phantomjs')  # browser浏览器
    # 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') #灰度化,图片转化成灰度图 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()
上一篇 下一篇

猜你喜欢

热点阅读