问题遇到的现象和发生背景
运行下面的代码时,每次调用起来的界面验证码和保存的验证码不一致,为什么?
用代码块功能插入代码,请勿粘贴截图
from selenium import webdriver
from aip import AipOcr
from PIL import Image
from selenium.webdriver.common.by import By
验证码的获取和处理
def get_captcha():
# 获取验证码图片
url = 'http://npgd.caict.ac.cn/login.html'
browser.get(url)
png = browser.find_element(By.ID, 'codeImage')
png.screenshot('capt.png') # 将图片截屏并保存
# 处理验证码
img = Image.open('capt.png')
img = img.convert('L') # P模式转换为L模式(灰度模式默认阈值127)
count = 160 # 设定阈值
table = []
for i in range(256):
if i < count:
table.append(0)
else:
table.append(1)
img = img.point(table, '1')
img.save('captcha.png') # 保存处理后的验证码
验证码的识别
def discern_captcha():
# 识别码
APP_ID = '27644450'
API_KEY = 'zbDf9GroMhk2rK2ALXKS8BKS'
SECRET_KEY = 'LTnsnQXduCh7Lo6oSKGaRSVOofRsDhcx'
# 初始化对象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 读取图片
def get_file_content(file_path):
with open(file_path, 'rb') as f:
return f.read()
image = get_file_content('captcha.png')
# 定义参数变量
options = {'language_type': 'ENG', } # 识别语言类型,默认为'CHN_ENG'中英文混合
# 调用通用文字识别
result = client.basicGeneral(image, options) # 高精度接口 basicAccurate
for word in result['words_result']:
captcha = (word['words'])
print('识别结果:' + captcha)
return captcha
登录网页
def login(captcha):
browser.find_element(By.ID, 'username').send_keys('huangkun') # 找到账号框并输入账号
browser.find_element(By.ID, 'password').send_keys('C3a_i6c!t8') # 找到密码框并输入密码
browser.find_element(By.ID, 'imgCode').send_keys(captcha) # 找到验证码框并输入验证码
browser.find_element(By.ID, 'btn_login').click() # 找到登陆按钮并点击
def get_file():
browser.find_element(By.XPATH, '/html/body/header/div/nav/ul/li[6]/a').click() # 找到文件按钮并点击
if name == 'main':
browser = webdriver.Chrome() # 实例化对象
get_captcha()
captcha = discern_captcha()
login(captcha)
# get_file()
运行结果及报错内容
没有报错,就是验证码不一致
我的解答思路和尝试过的方法
就是上面的代码。
我想要达到的结果
使保存下来的验证码就是界面上的验证码,无关识别结果是否准确。