Selenium(十三):验证码的处理、WebDriver原理
1. 验证码的处理
对于Web应用来说,大部分的系统在用户登录时都要求用户输入验证码。验证码的类型很多,有字母数字的、有汉字的,甚至还需要用户输入一道算术题的答案的。对于系统来说,使用验证码可以有效地防止采用机器猜测方法对口令的刺探,在一定程度上增加了安全性。
但对于测试人员来说,不管是进行性能测试还是自动化测试,都是一个比较棘手的问题。在WebDriver中并没有提供相应的方法来处理验证码,这里我就根据自己的经验来谈谈处理验证码的几种常见方法。
1.1 去掉验证码
这里最简单的方法,对于开发人员来说,只是把验证码相关的代码注释掉即可。如果是在测试环境,这样做可以省去测试人员不少的麻烦。但如果自动化脚本是在正式环境测试,那么这种做法就给系统带来了一定的风险。
1.2 设置万能验证码
去掉验证码的主要问题是安全,为了应对在线系统的安全威胁,可以在修改程序时不取消验证码,而在程序中留一个“后门”,即设置一个“万能验证码”。只要用户输入这个“万能验证码”,程序就认为验证通过,否则就判断用户输入的验证码是否正确。
设计万能验证码的方式非常简单,只需要对用户的输入信息多加一个逻辑判断,下面通过例子演示。
from random import randint #生成一个1000到9999之间的随机整数
verify = randint(1000,9999)
print(u"生成的随机数:%d" %verify) number = input("请输入随机数:")
print(number)
number = int(number) if number == verify:
print("登录成功!!")
elif number == 123456:
print("登录成功!!")
else:
print("验证码输入有误!")
randint()用于生成随机数,设置随机数的范围为1000-9999之间。运行程序分别输入正确的验证码、万能验证码和错误的验证码。就会发现,只要输入了万能验证码,无论生成的是什么数字,都可以通过验证。
1.3 验证码识别技术
可以通过Python-tesseract来识别图片验证码。Python-tesseract是光学字符识别Tesseract OCR引擎的Python封装类,能够读取如何常规的图片文件(JPG、GIF、PNG、TIFF等)。不过目前市面上的验证码形式繁多,大多验证码识别技术的识别率都很难达到100%。但是现在出现了很多的OCR,例如百度云OCR、微软Azure图像识别、有道智云文字识别、阿里云图文识别、腾讯OCR文字识别等太多的识别技术了。然而我们公司的自动化开发并不使用验证码识别技术,我们公司又更多千奇百怪的过验证码技术,但是在文章里不好描述,就说下常用的一种吧,通过爬虫爬取验证码文件,将验证码通过统一处理,开发的在进行自动化的时候,读取到随机生成的验证码的文件信息,与公司的验证码的信息进行对比,匹配到信息相同的,就输入对应的验证码。
1.4 记录cookie
通过向浏览器中添加cookie可以绕过登录的验证码,这里比较有意思的一种解决方案。例如我们第一次登录某网站时勾选的“记住密码”的选项,当下次访问该网站时自动就处于登录状态了。这样自然就绕过了验证码问题。这个“记住密码”的功能其实就是记录在了浏览器的cookie中。前面已经学了通过WebDriver来操作浏览器的cookie,可以通过add_cookie()方法将用户名密码写入浏览器cookie,当再次访问网站时服务器将直接读取浏览器的cookie进行登录。
#访问XX网站
wd.get("http://www.xx.com") #将用户名密码写入浏览器cookie
wd.add_cookie({'name':'Login_UserNumber','value':'username'})
wd.add_cookie({'name':'Login_Passwd','value':'password'}) #再次访问XX网站,将会自动登录
wd.get("http://www.xx.com")
这种方式最大的问题是如何从浏览器的cookie中找到用户名和密码对应的key值,并处输入对应的登录信息。可以用get_cookies()方法来换取登录的所有cookie信息,从中找到用户名和密码的key。当然,更直接的方式是询问开发人员。
2. WebDriver原理
WebDriver是按照Server-Client的节点设计模式设计的。
Server端就是Remote Server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是Remote Server,它的职责就是等待Client发送请求并作出响应。
Client端简单说来就是我们的测试代码。我们测试代码中的一些行为,例如打开浏览器,跳转到特定的URL等操作是以http请求的方式发送给被测试浏览器的,也就是Remote Server。Remote Server接受请求,执行相应操作,并在Response中返回执行状态、返回值等信息。
WebDriver的工作流程:
WebDriver启动目标浏览器,并绑定到指定端口。启动的浏览器实例将作为WebDriver的Remote Server。
Client端通过CommandExcuter发送HTTPRequest给Remote Server的监听端口(通信协议:the webriver wire protocol)
Remote Server需要依赖原生的浏览器组件(如IEDriverServer.exe、chromedriver.exe)来转化浏览器的native调用。
Python提供了logging模块给运行中的应用提供了一个标准的信息输出接口。它提供了basicConfig()方法用于基本信息的定义。开启debug模块,就可以捕捉到客户端向服务器发送的请求。
from selenium import webdriver
import logging logging.basicConfig(level=logging.DEBUG)
wd = webdriver.Chrome() wd.get('https://www.baidu.com') wd.find_element_by_id("kw").send_keys("selenium")
wd.find_element_by_id("su").click()
basicConfig()所捕捉的log信息。不过basicConfig()开启的debug模式只能捕捉到客户端向服务器发送的POST请求,而无法获取服务器所返回的应答信息。我们在后面的章节中将会学会Selenium Server,通过Selenium Server可以获取到更详细的请求与应答信息。

Selenium(十三):验证码的处理、WebDriver原理的更多相关文章
- Selenium WebDriver原理(二):Selenium是如何操纵浏览器的?
前言 上一篇文章<selenium webdriver 是怎么运行的>用了一个简单的例子--搭出租车,形象地讲解selenium webdriver 是如何运行的,而这一篇文章可以理解为深 ...
- Selenium WebDriver原理
WebDriver原理 WebDriver是按照Server-Client的经典设计模式设计的. Server端就是RemoteServer,可以是任意的浏览器,当我们的脚本启动浏览器后,该浏览器就是 ...
- Selenium 2自动化测试实战24(webdriver原理)
一.webdriver原理 webdriver是按照Server-Client的经典设计模式设计的.Server端就是Remote Server,可以是任意的浏览器.当我们的脚本启动浏览器后,该浏览器 ...
- selenium-webdriver(python) (十四) -- webdriver原理
之前看乙醇视频中提到,selenium 的ruby 实现有一个小后门,在代码中加上$DEBUG=1 ,再运行脚本的过程中,就可以看到客户端请求的信息与服务器端返回的数据:觉得这个功能很强大,可以帮助理 ...
- selenium-webdriver(python) (十四) -- webdriver原理(转)
之前看乙醇视频中提到,selenium 的ruby 实现有一个小后门,在代码中加上$DEBUG=1 ,再运行脚本的过程中,就可以看到客户端请求的信息与服务器端返回的数据:觉得这个功能很强大,可以帮助理 ...
- selenium 参数设置-window.navigator.webdriver
selenium 参数设置 selenium启动chrome基本上与真实环境类似,但有一些变量还是不一样,需要注意. 有些网站通过这些参数识别爬虫. window.navigator.webdrive ...
- webdriver原理及操作
webdriver原理: 1. WebDriver 启动目标浏览器,并绑定到指定端口.该启动的浏览器实例,做为 webdriver 的 remote server. 2. Client 端通过 Com ...
- Selenium WebDriver原理(一):Selenium WebDriver 是怎么工作的?
首先我们来看一个经典的例子: 搭出租车 在出租车驾驶中,通常有3个角色: 乘客 : 他告诉出租车司机他想去哪里以及如何到达那里 对出租车司机说: 1.去阳光棕榈园东门 2.从这里转左 3.然后直行 2 ...
- python+selenium十三:破解简单的图形验证码
此方法可破解简单的验证码,如: 注:中文识别正在寻找办法 安装: 1.python3 2.Pillow 3.pytesseract 4.tesseract-ocr 下载地址:https://pa ...
随机推荐
- html5 websocket 示例,websocket在线聊天,php websocket实例
WebSocket在线测试工具 http://ws.douqq.com/ 1.连接格式为 ws://IP/域名:端口(示例ws://119.29.3.36:5354) 2.对于内网的测试环境,只需填入 ...
- Internet History,Technology,and Security - History: Commercialization and Growth(Week4)
Explosive Growth of the Internet and Web The Year of the Web 正如你所知道的,1994年是网络之年.1994年,NCSA的一位员工离职并建立 ...
- cmake常用命令总结
最近研究了下cmake,总结了一些常用命令,方便以后快速查找. project(projectname [CXX] [C] [Java]): 设置工程名. set(VAR [VALUE] [CACHE ...
- 转载 全角字符unicode码对应表
http://www.mytju.com/classcode/tools/encode_utf8.asp 对应关系查询网站 Uni. GB Uni. GB Uni. GB Uni. GB Uni. G ...
- 4.Android-adt安卓打包过程、adb指令学习
本章学习adt安卓打包过程.adb指令学习.并通过adb将打包的APK发给设备 1.打包 在eclipse中已经帮我们实现打包了. 具体打包流程如下: 最终一个APK包含了如下: classes.de ...
- 精通awk系列(14):细说awk中的变量和变量赋值
回到: Linux系列文章 Shell系列文章 Awk系列文章 awk变量 awk的变量是动态变量,在使用时声明. 所以awk变量有3种状态: 未声明状态:称为untyped类型 引用过但未赋值状态: ...
- webpack安装错误 ‘webpack : 无法加载文件’
- 破解另一家网站的反爬机制 & HMAC 算法
零.写在前面 本文涉及的反爬技术,仅供个人技术学习,禁止并做到: 干扰被访问网站的正常运行 抓取受到法律保护的特定类型的数据或信息 搜集到的数据禁止传播.交给第三方使用.或者牟利 如有可能,在爬到数据 ...
- Jmeter录制后的脚本调优
当我们通过badboy或者HTTP代理服务器的方式录制的脚本,会发现脚本杂乱无章,图片.css.html以及各种我们不关心的脚本,因此就需要针对录制后的脚本进行调优 1.去除图片.html/css等不 ...
- Microsemi Libero系列教程(二)——新建点灯工程
前言 上一篇文章,介绍了Microsemi Libero系列教程(一)-Libero开发环境介绍,下载,安装与注册,作为嵌入式开发中的Hello World,点灯是再也基础不过的实验了,通过点灯实验, ...