文档章节

Selenium(十四)处理登录框的验证码

o
 osc_fmg49rzg
发布于 2019/03/20 11:37
字数 959
阅读 20
收藏 0

精选30+云产品,助力企业轻松上云!>>>

    对于 web 应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,
对于系统来说使用验证码可以有效果的防止采用机器猜测方法对口令的刺探,在一定程度上增加了安全性。


   但对于测试人员来说,不管是进行性能测试还是自动化测试都是一个比较棘手的问题。在 WebDriver中并没有提供相应的方法来处理验证码。

如下图的验证码:

 

一般来说有以下几种解决方案:

  • 去掉验证码

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

 

  • 设置万能码

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

#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之间。运行程序分别输入正确的验证码、万能码和错误的验证码

 

  • 验证码识别技术

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

  • 记录 cookie

通过向浏览器中添加 cookie 可以绕过登录的验证码,这是比较有意思的一种解决方案。比如我们在第一次登录某网站可以勾选“记住密码”的选项,当下次再访问该网站时自动就处于登录状态了。

这样其实也绕过验证码问题。那么这个“记住密码”的功能其实就记在了浏览器的 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,这会存在一定的安全风险。那么这种方式就不起作用了。

 

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

jQuery获取select onChange的值 - jQuery get value of select onChange

问题: I was under the impression that I could get the value of a select input by doing this $(this).val(); 我的印象是我可以通过执行$(this).val();来获取选择输入的值$(this).val()......

javail
47分钟前
13
0
道翰天琼解密宇宙信息大脑三者最核心奥秘,破解认知智能基础理论(群聊形式)

三体论是探索研究宇宙,信息和人类大脑三者关系的理论体系。是认知智能的奠基理论体系之一。宇宙和信息,信息和人类大脑,人类大脑和宇宙,三者之间存在着某种未被完全揭示的奥秘。三体论的核...

jackli2020
48分钟前
15
0
OSChina 周日乱弹 —— 这些照片能留存下来要感谢蛇不吃相机

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《28》- ゴンチチ 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :真得学...

小小编辑
56分钟前
76
0
如何在视频中的对象后面添加图像

作者|PRATEEK JOSHI 编译|VK 来源|Analytics Vidhya 概述 在运动物体后面添加图像是一个典型的计算机视觉项目 了解如何使用传统的计算机视觉技术在视频中添加logo 介绍 我的一位同事向我提出...

人工智能遇见磐创
今天
14
0
UKUI Desktop Environment

install $ sudo add-apt-repository ppa:ubuntukylin-members/ukui3.0$ sudo apt upgrade or $ sudo apt-get install curl$ curl -sL 'https://keyserver.ubuntu.com/pks/lookup?&op=get&......

qwfys
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部