hknzh 2022-09-27 14:45 采纳率: 66.7%
浏览 21
已结题

自动登录网站验证码不一致

问题遇到的现象和发生背景

运行下面的代码时,每次调用起来的界面验证码和保存的验证码不一致,为什么?

用代码块功能插入代码,请勿粘贴截图

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()

运行结果及报错内容

没有报错,就是验证码不一致

我的解答思路和尝试过的方法

就是上面的代码。

我想要达到的结果

使保存下来的验证码就是界面上的验证码,无关识别结果是否准确。

  • 写回答

3条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 10月9日
      • 已采纳回答 10月1日
      • 创建了问题 9月27日

      悬赏问题

      • ¥15 Mac系统word显示此文档已被删除或当前无法访问.
      • ¥15 Unity用代码实现Tilemap
      • ¥15 怎么求广播地址以及网络地址?
      • ¥15 想知道unity如何实现物体贴地运动
      • ¥15 从A地到B地有多条路径可以到达,现要从A地到B地运物资问题
      • ¥30 用java设计小游戏扑克牌比大小,52张牌的图片选世界篮球明星图或其它都行
      • ¥15 ATM管理员功能代码及解释
      • ¥15 EasyExcel导出下载文件响应流为空
      • ¥15 Python爬虫添加详细注释
      • ¥15 python的为什么wordcloud词云就是下载不了