selenium自动化测试之--验证码处理

由于登录反爬措施的越来越麻烦,甚至出现了12306这种看图识物的无敌验证码,我只能说,我选择死亡。这就衍生出了使用selenium来获取获取cookies。

因为经常会出现验证码,导致我们ui自动化测试工作无法更好开展,那么如何处理这种验证码呢?

像这种滑块和手机验证码的情况下,无法通过正常办法是没有办法进行处理,那么 一般对这种处理有以下几种思路:

1、 通过接口请求,拿到对应验证码信息

2、 让开发配合把验证码搞成万能验证码

3、 注入cookies

那么如何通过注入cookies的形式来实现呢?

首先我们先通过自动化形式打开我们登录页面,此时我们加一定的延时时间,手动登录后,打印出来cookies信息,此时我们就知道所需要的cookies信息了。

driver = webdriver.Chrome()
driver.get("https://fly.layui.com/user/login/")
time.sleep(3)
cookies = driver.get_cookies()
print (cookies)

拿到cookies信息后,我们此时就可以去写登录的代码去免登陆了:
driver = webdriver.Chrome()
driver.get("https://fly.layui.com/user/login/")
cookies_01 = {‘domain‘: ‘fly.layui.com‘, ‘expiry‘: 15522.125036, ‘httpOnly‘: True, ‘name‘: ‘fly-layui‘, ‘path‘: ‘/‘, ‘secure‘: False, ‘value‘: ‘s%3AwqpG2eBNqbfd6lmmWLc-DTiNP_.EAy1gm0u%2BCI8SMAxkFkaRWxUoGByz0g4RDXySLsjOfo‘}
cookies_02 = {‘domain‘: ‘.layui.com‘, ‘expiry‘: 1567495108, ‘httpOnly‘: False, ‘name‘: ‘Hm_lvt_d214947968792b839fd669a4decaaffc‘, ‘path‘: ‘/‘, ‘secure‘: False, ‘value‘: ‘1551959096‘}
cookies_03 = {‘domain‘: ‘.layui.com‘, ‘httpOnly‘: False, ‘name‘: ‘Hm_lpvt_d214947968792b839fd669a4decaaffc‘, ‘path‘: ‘/‘, ‘secure‘: False, ‘value‘: ‘1558659109‘}

driver.add_cookie(cookies_01)
driver.add_cookie(cookies_02)
driver.add_cookie(cookies_03)
driver.refresh()
刷新后就可以自动登录了。

但是这存在一个问题就是,如果cookies信息很多,一条条手动去添加过去麻烦,所以我们可以先把他存到一个文件中:
cookiesFile = json.dumps(cookies)
with open(‘cookiesFile.json‘, ‘w‘) as filemy:
    filemy.write(cookiesFile)
这样你之前的cookies信息就会存在cookies文件中,下次要去使用就直接读文件就好了,具体实现如下:

with open(‘cookiesFile.json‘,‘r‘) as filemy:
    cookiesInfo=json.loads(filemy.read())

for cc in range(0,len(cookiesInfo)):

    driver.add_cookie(cookiesInfo[cc])
driver.refresh()
此时通过refresh后,我们就直接登入了系统,是不是很方便呢

原文地址:https://www.cnblogs.com/jiachangwei/p/12153055.html

时间: 2024-10-09 10:27:26

selenium自动化测试之--验证码处理的相关文章

Selenium 自动化测试之道--学习总结-WebDriver

最近正在看Ping++测试团队编著的<Selenium 自动化测试之道>,非常非常好的一本书,不仅仅是工具的介绍使用,还有非常珍贵的实践总结,自己的公司也在做自动化,由于是基于B/S,要考虑到硬件环境,而且主要使用的是RobotFramework去构建自动化脚本验证系统的可靠性. 之前自己也学习过关于Selenium的知识,但是总感觉知识很零散,自己在网上搜了很长时间,买了这本书,发现自己还欠缺很多,很庆幸能读到这本书,下面开始一点点的搭建自己的知识框架. 一.工作原理 Selenium We

selenium自动化登录验证码

实际是把验证码忽略掉了; 这个例子没有验证号码,试想下如果有验证码,第一次执行时,验证码从命令行读入输入(当然这个过程靠人), 然后把登陆后的cookie序列化; 以后登陆时从序列化的cookie文件读入; #! /usr/bin/python # coding=utf-8 from selenium import webdriver import time driver=webdriver.Chrome() driver.get('http://mail.163.com/') #163邮箱登陆

Selenium自动化测试之元素定位

一.Selenium定位方法 自动化测试的关键是要准确的操作测试对象,所以就需要对被测系统的页面元素做精确的定位:有以下几种定位方法: By.classNme(String className) By.cssSelector(String selector) By.id(String id) By.linkText(String linkText) By.name(String name) By.partialLinkText(String linkText) By.tagName(String

Selenium自动化测试之启动浏览器

一.Eclipse新建java工程 1.新建java工程:File->New->Java Project,输入Project name:如AutoTest,名称随意,点击Finish: 2.新建Package:选择AutoTest项目,右键->New->Package,输入name,如com.test.selenium,名称随意,点击Finish: 3.新建class类:选择com.test.selenium包,右键->New->Class,输入name,如:Test,

Selenium自动化测试之学会元素定位

这是我经常被问到的一个问题,也是我很讨厌回答的问题,因为要想回答这个问题需要知道上下文.什么样式的元素,有哪些属性,是否有表单嵌套,都尝试了哪些定位方法...而且没几个提问者能事先详细的说明这些.哪儿像提bug一样描述重现步骤,而且每一步都截图,生怕开发重现不了.反正,向我提问者没见过这样的,大多就报着试试态度,你爱回不回,碰碰运气说不定就回我了. 当然,我写这一篇文章的目的肯定不是为了吐槽,我是打算拿这个链接丢给他看,所以,这里会总结常见几种情况,以及解决办法.如果本文能不解决你的问题,你问我

Selenium 自动化测试之道--学习总结-TestNG

一.环境搭建 使用maven搭建testng测试框架 1.在apache官网下载并安装maven,解压maven压缩包: 2.配置maven的环境变量  M2_HOME  D:\Program Files\apache-maven-3.0.5 path  %M2_HOME%\bin; 3.  找的.m2文件压缩包(里面有打包好的库文件),解压到这个路径%userprofile%下的(C:\Administrator) 4.在eclipse中修改maven的安装路径:window---->pref

selenium自动化测试之测试结果验证

1.实际测试过程中,常常要对比实际结果与期望结果是否一致.2.如果实际结果与期望结果不一致则被认为bug selenium广泛应用于B/S架构,如何通过selenium来验证测试结果的正确性呢. 案例分析:以百度为例,一起来看看如何验证测试结果的正确性. 点击百度首页的"hao123"后: 跳转至"hao123"页面 验证:是否跳转至"hao123"页面 如何通过selenium实现该场景呢? #****************** # 获取验证

selenium自动化测试之元素定位一

Selenium元素定位方法总共有八大类,分别是:id,name,class name,tag name,link text,partial link text,xpath,css.八种定位方法没有哪个是最好的,在不同的场景下需要使用不用的定位方法. 示例html文件如下: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"/> <me

Selenium自动化测试之基本控件使用

1.输入框input: 在Html中样式: <input id="username" type="text"> 操作: driver.findElement(By.id("username")).clear(); driver.findElement(By.id("username")).sendKeys("test"); 说明: clear表示清除输入框中的数据: sendKeys表示向输入框