使用验证码可以有效的防止采用机器猜测方法对口令的刺探,在一定程度上增加了安全性,关于在自动化测试中使用验证码,主要有以下几种方式:
1、去掉验证码
2、设置万能验证码。去掉验证码的主要问题是安全,为了应对在线的系统的安全威胁,可以在修改程序时不取消验证码,而是在程序中留一个“后门”,即设置一个“万能验证码”。只要用户输入这个“万能验证码”,程序就认为验证通过 ,否则就判断用户输入的验证码是否正确,设计万能验证码只要对用户的输入信息多加一个逻辑判断,如下:
from random import randint
verify = randint(1000,9999) #生成一个1000到9999之间的随机参数
print(u"生成的随机:%d" %verify)
number = input("请输入随机数:")
print(number)
number = int(number)
if number == verify:
print("登录成功!!")
elif number == 132741:
print("登陆成功!!")
else:
print("验证码输入有误!")
randint()用于生成随机数,设置随机数的范围为1000-9999之间,运行程序分别输入正确的验证码,万能验证码和错误的验证码
万能验证码的另一个例子:
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.testmail.com")
print('Before login===========')
title = driver.title # 打印当前页面title
print(title)
now_url = driver.current_url #打印当前页面url current_url用户获得当前页面的URL
print(now_url)
#执行邮箱登录
driver.find_element_by_id("idInput").clear()
driver.find_element_by_id("idInput").send_keys("username")
driver.find_element_by_id("pwdInput").clear()
driver.find_element_by_id("pwdInput").send_keys("password") # password为后端写死的万能验证码
driver.find_element_by_id("loginBtn").click()
time.sleep(5)
print('After login======')
title = driver.title #再次打印当前页面title
print(title)
now_url = driver.current_url #打印当前页面URL
print(now_url)
user = driver.find_element_by_id("spnUid").text #获得登录的用户名
print(user)
driver.quit()
3、验证码识别技术,如:可以通过Python-tesseract来识别图片验证码,Python-tesseract是光学字符识别Tesseract OCR引擎的Python封装类,能够读取任何常规的图片文件(JPG,GIT,PNG,TIFF等)。不过,目前市面上的验证码形式繁多,大多验证码识别技术,识别率都很难达到100%
4、记录cookie,通过向浏览器中添加cookie可以绕过登录验证码,这是比较有意思的一种解决方案,如在第一次登录某个网站,勾选记住密码,当下次再访问该网站时就自动处于登录状态,这就自然绕过了验证码的问题,这个记住密码功能其实就是记录在了浏览器的cookie中,webdriver来操作浏览器的cookie,可以通过add_cookie()方法将用户名密码写入浏览器cookie,当再次访问网站时,服务器将直接读取浏览器的cookie进行登录。
driver.get("http://www.XX.cn") #访问XX网站
driver.add_cookie({'name':'Login_UserNumber','value':'username'}) #将用户名密码写入浏览器cookie
driver.add_cookie({'name':'Login_Passwd','value':'password'})
driver.get("http://www.XX.cn/") #再次访问XX网站,将会自动登录
driver.quit()
这种方式最大的问题是如何从浏览器的cookie中找到用户名和密码对应的key值,并输入对应的登录信息,可以用get_cookies()方法来
获取登录的所有的cookie信息,从中找到用户名和密码的key。当然,更直接的方式是询问开发人员。