使用selenium实现web自动化(五)-----验证码循环认证

本文讲述了在验证码识别不准确时,通过多次循环验证码处理并利用ddddocr框架进行识别,直至成功登录的自动化登录策略。作者强调了当现有框架无法精确识别时,采用重复验证的方法可以提高成功率。
摘要由CSDN通过智能技术生成

1、上节提到用ddddocr框架识别验证码,但很多情况下,识别并不准确,导致经常登录失败,目前并没有好的、精准的识别框架来满足。网上搜索提到的办法就是用大数据,神经网络训练去提高精准度,但往往这种应用在自动化登录这块就显得尤其麻烦。因此,本人觉得采用多次认证的办法,只要能识别成功即可。通过循环,直到认证成功。核心代码如下:

# 反复验证登录,直到输入正确的验证码登录成功
loginStatus=False
while loginStatus !=  True:
# 刷新页面
driver.refresh()
time.sleep(3)
# 验证码处理
# 找到验证码并将验证码以截图的方式保存
driver.find_element(By.XPATH, '//*[@id="img_vcode"]').screenshot("D:/vscode/test/picture/img.png")
# 读取彩色图像
image = cv2.imread('D:/vscode/test/picture/img.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 保存处理后的图像为新文件
cv2.imwrite('D:/vscode/test/picture/gry.png', gray)
ocr = ddddocr.DdddOcr()
with open('D:/vscode/test/picture/img.png', 'rb') as f:
    img_bytes = f.read()
res = ocr.classification(img_bytes)
print(res)
# 填入验证码
driver.find_element(By.NAME, 'vldcode').send_keys(res) 
# 找到用户名和密码输入框并输入正确的用户名和密码
username_input = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "user_name")))
username_input.send_keys(f'{user}')
time.sleep(1)
password_input = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "password")))
password_input.send_keys(f'{password}')
time.sleep(1)
login_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "loginbtn")))
login_button.click()
time.sleep(1)
# 判断登录是否成功的条件
login_success_condition = '书签' in driver.page_source
print(login_success_condition)
if login_success_condition:
    # 登录成功,结束循环
    loginStatus=True
    break
else:
    # 登录失败,输出提示信息
    print("登录失败,请重新登录")
    continue

2、判断登录成功的条件为正常登录成功后的页面,检查某个字段即可。亲测,正常情况下会循环个几次,最后一次识别成功,可正常登录。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值