知网注册(传统图片验证码识别)
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()