第七下载:绿色软件放心下载

首页 > 软件教程 > 办公应用 > 详情

如何解决自动化测试难题的验证码?

作者:王晶 来源:第七下载 更新:2022-05-15 23:06:00 阅读:

用手机看

一.去掉验证码

这是最简单的解决方案, 对于开发人员来说, 只是将验证码的相关代码注释掉就行, 但这种方案只能在测试环境下进行, 在线上环境下会对系统产生一定的风险.

 

二.设置万能验证码

去掉验证码会产生安全问题, 线上系统的安全性很重要不能忽略, 这时我们可以采用不取消验证码, 而是在程序代码中留一个"后门" 也就是预留一个万能的验证码, 只要输入这个固定的万能验证码, 则认为验证通过.

 

三.验证码识别技术

步骤1: 安装识别验证码需要的python库

pip install pillow

pip install pytesseract

步骤2: 通过代码识别图片尺寸并获取识别后的验证码

from io import BytesIO

from PIL import Image

import pytesseract

from selenium import webdriver

from selenium.webdriver.common.by import By

 

driver = webdriver.Chrome()

driver.implicitly_wait(10)

driver.maximize_window()

driver.get('http://localhost/index.php/Home/user/login.html')

# 保存页面

scree = driver.get_screenshot_as_png()

# 定位图片

img = driver.find_element(By.ID, 'verify_code_img')

# 输出图片 及尺寸大小

print(img.location, img.size)

location = img.location #图片坐标轴

size = img.size # 图片大小

 

left = location['x'] # x轴

top = location['y'] # y轴

right = size['width'] + left # 宽度

bottom = size['height'] + top # 高度

verify_img = Image.open(BytesIO(scree)).crop((left,top,right,bottom))

verify_img.save('verify_img.png')

image1 = Image.open('verify_img.png')

text = pytesseract.image_to_string(image1)

print(text)

识别技术成功率一般低于30%, 仍然需要不断的进行优化和练习才能够提升.

 

四.记录cookie

以BaiDu为案例:

步骤1: 通过浏览器登录正常的百度账号, 如下图:

步骤2: 使用抓包工具或者打开浏览器的开发者工具栏,找到Application中的Cookies选项:

 

找到最最重要的两个数据: "BAIDUID"   "BDUSS"

步骤3:

编写自动化测试脚本, 跳过登录

from time import sleep

from selenium import webdriver

 

driver = webdriver.Chrome()

driver.maximize_window()

driver.get("https://www.baidu.com")

 

# 添加Cookie

driver.add_cookie({'name':'BAIDUID','value':'1699E29FCB27B74AE688991269EE7212:FG=1'})

driver.add_cookie({'name':'BDUSS','value':'FZTndRRnBlSjNMQUZsNzNPSzdCZnp0MU83TX5lLU9XaDJrdHloTS1odWpJcDlpRVFBQUFBJCQAAAAAAAAAAAEAAADv1Oew0rvT79K7yMvJ-s7eu9oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOVd2KjlXdiOH'})

 

# 刷新页面

driver.refresh()

sleep(5)

#关闭浏览器

driver.quit()

刷新浏览器,显示已登录效果:

 

使用cookie进行登录绕过的最大难点是如何来获取用户的cookie相关数据, 最重要的是 name和key这两个参数.

我们可以通过selenium中的  driver.get_cookies()方法来获取, 数据为 [{"key1":"value1"},{"key2":"value2"}...] 列表嵌套字典格式,先对列表数据进行遍历,再来进一步确认需要使用的数据.

最后: 

最简单安全行之有效的方式就是设置万能验证码, 当然愿意在技术方向更进一步的同学, 也可以通过验证码识别来实现.

?
热点推荐
?
赞助
?
网友跟帖吐槽
pl
返回顶部