最近在研究web自动化,登录时发现要输入验证码,之前在做手机app自动化时,就被验证码block了。这次做web时又遇到了,探索之后,发现有如下几个解决办法:

1.联系开发人员,让其帮忙在测试环境中注释掉验证码操作,这样极大方便了测试人员,同时也降低了在正式环境中跑测试,给系统带来的风险;

2.联系开发人员,修改成万能验证码。即在程序中留一个“后门”---设置一个“万能验证码”,只要用户输入这个“万能验证码”,程序就认为验证通过,否则按照原先的验证方式进行验证。

3.添加cookies

在使用webdriver测试中,cookie能够实现不必再次输入用户名密码进行登陆。

先介绍一下cookies的API:

  1>getDomain();返回cookies的域名

  2>getMaxAge();返回cookies的存活时间

  3>getName();返回cookies的名字

  4>getPath();返回cookies使用的路径

  5>getSecure();如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值

  6>getValue();返回cookies的值

  7>getVersion();返回cookies所遵从的协议版本

  8>setPath(String url);设置cookies的使用路径

  9>setSecure(Boolean flag);设置浏览器是否仅仅使用安全协议来发送cookies,例如使用https或ssl

  10>setValue(String newvaule);cookies创建后设置一个新的值

  11>setVersion();设置cookies所遵从的版本

  12>setComment(String purpose);设置cookies的注释

selenium webDriver通过driver.manage().getCookies()和driver.manage().addCookies(ck)获取并加载cookies。

先获取登录的cookies,并保存到browser.data下,之后打开网址时加载已经保存的cookies。

package com.demo.test.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.concurrent.TimeUnit; import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver; public class Cookies {
/**
* @author Yajing
*
*/
public static void addCookies() {
WebDriver driver = new FirefoxDriver();
driver.navigate()
.to("http://passport.chinahr.com/pc/tologin?backUrl=http://www.chinahr.com/beijing/");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); WebElement user = driver.findElement(By.xpath(".//*[@id='account']"));
user.clear();
user.sendKeys("xxxxxxxxxxx");
WebElement password = driver.findElement(By
.xpath(".//*[@id='secretPWD']"));
password.clear();
password.sendKeys("xxxxxx"); try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} WebElement submit = driver.findElement(By
.xpath(".//*[@id='normalLogin']"));
// submit.submit();
submit.click(); try {
Thread.sleep(3 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} File file = new File("broswer.data");
try {
// delete file if exists
file.delete();
file.createNewFile();
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for (Cookie ck : driver.manage().getCookies()) {
bw.write(ck.getName() + ";" + ck.getValue() + ";"
+ ck.getDomain() + ";" + ck.getPath() + ";"
+ ck.getExpiry() + ";" + ck.isSecure());
bw.newLine();
}
bw.flush();
bw.close();
fw.close(); } catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("cookie write to file");
}
} public static void main(String[] args) {
addCookies();
WebDriver driver = new FirefoxDriver();
driver.get("http://www.chinahr.com/beijing/");
try {
File file = new File("broswer.data");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
StringTokenizer str = new StringTokenizer(line, ";");
while (str.hasMoreTokens()) {
String name = str.nextToken();
String value = str.nextToken();
String domain = str.nextToken();
String path = str.nextToken();
Date expiry = null;
String dt;
if (!(dt = str.nextToken()).equals(null)) {
// expiry=new Date(dt);
System.out.println();
}
boolean isSecure = new Boolean(str.nextToken())
.booleanValue();
Cookie ck = new Cookie(name, value, domain, path, expiry,
isSecure);
driver.manage().addCookie(ck);
}
} } catch (Exception e) {
e.printStackTrace();
} driver.get("http://www.chinahr.com/beijing/");
}
}

有一点需要说明,在执行addCookies()打开浏览器的时候,登录的时候一定要保证登录时正确的,这样保存的browser.data才有效,否则之后还是不能自动登录。每次执行文件都会重新写browser.data文件,所以只需要执行一次addCookies()拿到正确的browser.data即可。

参考大神博客:http://www.cnblogs.com/tobecrazy/p/3985168.html

selenium2自动处理验证码的更多相关文章

  1. Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题

    日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...

  2. Selenium2+python自动化41-绕过验证码(add_cookie)

    前言 验证码这种问题是比较头疼的,对于验证码的处理,不要去想破解方法,这个验证码本来就是为了防止别人自动化登录的.如果你能破解,说明你们公司的验证码吗安全级别不高,那就需要提高级别了. 对于验证码,要 ...

  3. Selenium2+python自动化41-绕过验证码(add_cookie)【转载】

    前言 验证码这种问题是比较头疼的,对于验证码的处理,不要去想破解方法,这个验证码本来就是为了防止别人自动化登录的.如果你能破解,说明你们公司的验证码吗安全级别不高,那就需要提高级别了. 对于验证码,要 ...

  4. python selenium2 有关cookie操作实例及如何绕开验证码

    1.先看一下cookie是啥 cookie是访问web时服务器记录在用户本地的一系列用户信息(比如用户登录信息),以便对用户进行识别 from selenium import webdriver im ...

  5. 《selenium2 python 自动化测试实战》(12)——跳过验证码登录add_cookie

    微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

  6. python selenium2 模拟点击+拖动 测试对象 58同城验证码

    #!/usr/bin/python # -*- coding: UTF-8 -*- # @Time : 2019/12/5 17:30 # @Author : shenghao/10347899@qq ...

  7. Selenium2+python自动化13-Alert

    不是所有的弹出框都叫alert,在使用alert方法前,先要识别出它到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决.alert\confirm\prompt弹出框 ...

  8. Selenium2学习-004-WebUI自动化实战实例-002-百度登录

    此文主要通过 百度登录 功能,进行 Selenium2 的实战实例讲解.文中所附源代码于 2015-01-17 23:33 亲测通过,敬请亲们阅览.同时,您也可参考此文进行其他网站(例如 京东.易迅. ...

  9. Selenium2+Python自动化测试实战

    本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用.后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的 ...

随机推荐

  1. java进程占用系统内存高,排查方法

    查看所有内存占用情况 top 定位线程问题(通过命令查看16764 进程的线程情况) ps p -L -o pcpu,pmem,pid,tid,time,tname,cmd 计数 ps p -L -o ...

  2. webpack.config.js====webpack-dev-server开发服务器配置

    1. 安装webpack-dev-server(在指定目录下),一定要先安装完毕webpack webpack-cli之后在安装webpack-dev-server 一个基于expressjs的开发服 ...

  3. I/O操作总结(一)

    所谓IO,也就是Input与Output的缩写.在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写 其他知识点将放置后续章节(我想,文章太长了,谁都没耐心翻到最后) 对于文件内容的操作 ...

  4. vuejs 组件 移动端push 没有渲染页面

    this.idcards.push(arr) 这个无效 就知道了 vuejs有个跟push相同的方法 console.log(this.list.push.toString()) 这个push是个同名 ...

  5. Android Studio maven-metadata.xml 卡着不动原因和解决方法

    头一天好好的,第二天就卡着了. 一直在这个地方不动,如果停止就会报 Error:Could not run build action using Gradle distribution ‘https: ...

  6. Cocos2d-x v3.1 初识(一)

    Cocos2d-x v3.1 初识(一) Cocos2d-x从以前苹果平台上的Cocos2d发展而来,版本已经更新到了3.1.1.作为一个跨平台的游戏开发引擎,现在已经被上百个国家在使用,这也是国人的 ...

  7. Wireshark漫谈(一)

    可能有人会说,一个软件的安装有什么好谈的,无非就是"同意,同意,同意......是,是,是"诸如此类的选项.的确,Wireshark软件的安装步骤是挺简单的,不过本文不是想谈安装步 ...

  8. Java VS Python 应该先学哪个?

    http://blog.segmentfault.com/hlcfan/1190000000361407 http://www.tuicool.com/articles/fqAzqi Java 和 P ...

  9. 自定义标签jsp2格式

    在写自定义标签时候是不是感觉很烦啊,其实人家也是这样认为的,于是我们的jsp新的标准对标签进行了更改,使我们用起来更简单.到底哪里简单呢?看看代码再说咯: 还是老规矩,先上一个标签的逻辑类: 1. p ...

  10. 2018.5.6 解决问题:oracle------ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务

    解决问题:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 或者是重启电脑之后无法进入控制台企业管理器(OEM)图形化界面(重新添加注入监听器就行了 文件listener.org) ...