使用OCR技术识别图形验证码
作者:互联网
一、OCR技术
OCR,即 Optical Character Recognition
,中文叫作光学字符识别,是指通过电子设备检查打印在纸上的字符,通过检查暗、亮的模式确认字符形状,然后通过字符识别方法将形状转换成计算机文字的过程。
那么对于图形验证码来说,它都是一些不规则的字符,但是这些字符确实是由字符稍加扭曲变换得到的内容。
爬虫过程中难免会遇到各种各样的验证码,而大多数验证码还是图形验证码,这时候我们可以直接用 OCR 来识别。
二、整体代码逻辑
1.打开有验证码填写的网站(https://captcha7.scrape.center/);
2.找到用户名输入框,输入用户名;
3.找到密码输入框,输入密码;
4.找到并截取验证码图片,转化为图片对象;
5.预处理验证码图片,去除噪声;
6.识别验证码,得到识别结果;
7.去除识别结果中的一些非字母字符和数字字符;
8.找到验证码输入框,输入验证码结果;
9.点击“登录”按钮;
10.等待“登录成功”的字样出现,如果出现就证明验证码识别正确,否则重复以上步骤。
示例代码:
# -*- UTF-8 -*-
"""
@File:test.py
@Description:
@Author:echohye
@Date:2022/02/03 18:11
"""
import time
import re
import tesserocr
from selenium import webdriver
from io import BytesIO
from PIL import Image
from retrying import retry
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
import numpy as np
def preprocess(image):
image = image.convert('L')
array = np.array(image)
array = np.where(array > 150, 255, 0)
image = Image.fromarray(array.astype('uint8'))
return image
@retry(stop_max_attempt_number=10, retry_on_result=lambda x: x is False)
def login():
browser.get('https://captcha7.scrape.center/')
browser.find_element(By.CSS_SELECTOR, '.username input[type="text"]').send_keys('admin')
browser.find_element(By.CSS_SELECTOR, '.password input[type="password"]').send_keys('admin')
captcha = browser.find_element(By.CSS_SELECTOR, '#captcha')
image = Image.open(BytesIO(captcha.screenshot_as_png))
image = preprocess(image)
captcha = tesserocr.image_to_text(image)
captcha = re.sub('[^A-Za-z0-9]', '', captcha)
browser.find_element(By.CSS_SELECTOR, '.captcha input[type="text"]').send_keys(captcha)
browser.find_element(By.CSS_SELECTOR, '.login').click()
try:
WebDriverWait(browser, 3).until(EC.presence_of_element_located((By.XPATH, '//h2[contains(., "登录成功")]')))
time.sleep(10)
browser.close()
return True
except TimeoutException:
return False
if __name__ == '__main__':
browser = webdriver.Chrome()
login()
selenium运行失败?点击我查看解决方法
tesserocr安装失败?点击我查看解决方法
运行展示
标签:image,selenium,验证码,captcha,import,图形,OCR,browser 来源: https://www.cnblogs.com/echohye/p/15861824.html