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 ...
随机推荐
- LeetCode529. 扫雷游戏 Python3 DFS+BFS+注释
https://leetcode-cn.com/problems/minesweeper/solution/python3-dfsbfszhu-shi-by-xxd630/ 规则: 'M' 代表一个未 ...
- Linux下搭建HttpRunnerManager接口测试平台
前言 之前在学习HttpRunner时,我们都是把用例写在 YAML/JSON 中进行维护,使用起来也很方便.其实,现在有不少大佬都喜欢开发自动化测试平台,比如我们今天要搭建的HttpRunnerMa ...
- Linux 的目录结构
原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/cbbf47b0-f ...
- aspnet boilerplate 随笔二
项目框架介绍: 1:Application: 在service里面事件具体业务,Dto相当于viewmodel实现了验证 2:Core:实现了数据层Model 3:EntityFrameworkC ...
- Windows密码获取和破解(初探)
Windows密码获取和破解 本文只是简单的讲明密码获取和破解 具体的操作细节均以模糊或具体代码混淆等方式避开 如有兴趣请自行研究,本文不做细说~~~ 获取思路: Windows密码一般是以" ...
- 第01讲 Android开发系列---Activity
一. Android系统版本及详细信息 最新数据 https://developer.android.com/about/dashboards/ 二. Android项目初探 1. 使用a ...
- ORA-27140: attach to post/wait facility failed
Errors in file /home/u01/app/oracle/diag/rdbms/hnybdb21/hnybdb211/trace/hnybdb211_j000_143099.trc:OR ...
- linux部署.net Core项目
首篇笔记,多多关照.方便回忆和给新手指导,大神绕道 首先在Linux系统部署.net Core项目首先准备一个Linux系统的服务器,百度云,阿里云都行. 1.net core 部署在Linux系统上 ...
- React 面试问题
eact 面试问题 如果你是一位有理想的前端开发人员,并且正在准备面试,那么这篇文章就是为你准备的.本文收集了 React 面试中最常见的 50 大问题,这是一份理想的指南,让你为 React 相关的 ...
- Nacos Cluster Building
原文链接:https://www.javaspring.net/nacos/nacos-cluster-building Continue to talk about the Nacos build ...