对于web 应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测方法对口令的刺探,在一定程度上增加了安全性。但对于测试人员来说,不管是进行性能测试还是自动化测试都是一个比较棘手的问题。在WebDriver
中并没有提供相应的方法来处理验证码。对验证码的常见处理方式有以下几种。

1. 去掉验证码

这是最简单的方法,对于开发人员来说,只是把验证码的相关代码注释掉即可,如果是在测试环境,这样做可省去了测试人员不少麻烦,如果自动化脚本是要在正式环境跑,这样就给系统带来了一定的风险

2. 设置万能码

去掉验证码的主要是安全问题,为了应对在线系统的安全性威胁,可以在修改程序时不取消验证码,而是程序中留一个“后门”---设置一个“万能验证码”,只要用户输入这个“万能验证码”,程序就认为验证通过,否则按照原先的验证方式进行验证。设计万能码的方式非常简单,只对于用户的输入信息多加一个逻辑判断,如下面的小例子:

#coding=utf-8
import random
#生成一个1000 到9999 之间的随机整数
verify = random.randint(1000,9999)
print u"生成的随机数:%d " %verify
number = input(u"请输入随机数:")
print number
if number == verify:
print u"登录成功!!"
elif number == 132741:
print u"登录成功!!"
else:
print u"验证码输入有误!"

randint()用于生成随机数,设置随机数的范围为1000~9999之间。运行程序分别输入正确的验证码、万能码和错误的验证码。 

3. 验证码识别技术-tesseract

例如可以通过Python-tesseract 来识别图片验证码,Python-tesseract 是光学字符识别Tesseract OCR 引擎的Python 封装类。能够读取任何常规的图片文件(JPG, GIF ,PNG , TIFF 等)。不过,目前市面上的验证码形式繁多,目前任何一种验证码识别技术,识别率都不是100% 

详细:https://www.jb51.net/article/132204.htm?tdsourcetag=s_pctim_aiomsg

4.记录cookie

通过向浏览器中添加cookie 可以绕过登录的验证码,这是比较有意思的一种解决方案。比如我们在第一次登录某网站可以勾选“记住密码”的选项,当下次再访问该网站时自动就处于登录状态了。这样其实也绕过验证码问题。那么这个“记住密码”的功能其实就记在了浏览器的cookie 中。前面已经学了通过WebDriver 来操作浏览器的Cookie,可以通过add_cookie()方法将用户名密码写入浏览器cookie ,再次访问网站时服务器直接读取浏览器Cookie 登录。

....
#访问xx 网站
driver.get("http://www.xx.cn")
#将用户名密码写入浏览器cookie
driver.add_cookie({'name':'Login_UserNumber', 'value':'username'})
driver.add_cookie({'name':'Login_Passwd', 'value':'password'})
#再次访问xx 网站,将会自动登录
driver.get("http://www.xx.cn/")
time.sleep(3)
....
driver.quit()

这种方式最大的问题是如何从浏览器的Cookie 中找到用户名和密码对应的key 值,并传传输入对应的登录信息。可以get_cookies()方法来获取登录的所有的cookie 信息,从中找到用户名和密码的key。当然,如果网站登录时根本不将用户名和密码写Cookie,这会存在一定的安全风险。那么这种方式就不起作用了。

转载原文:https://blog.csdn.net/qq_42492845/article/details/81168430?tdsourcetag=s_pctim_aiomsg

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐