意外
获取登录验证码实践 (selenium)
//创建验证码
var code=" " ;
function createCode(){
code = "";
var codeLength = 4;
var selectChar = new Array(1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f','g','h','j','k','l','m','n','p','q','r','s','t','u','v','w','x','y','z');
for(var i=0;i<codeLength;i++) {
var charIndex = Math.floor(Math.random()*60);
code +=selectChar[charIndex];
}
if(code.length != codeLength){
createCode();
}
showCheck(code);
sessionStorage.setItem("peo", code);
}
方案:
1、下载验证码图片,解析图片内容;
2、通过执行 js 获取 code,写文件保存到本地,再读取文件;
3、通过执行 js 获取 code,通过 alert 方式展现,读取弹框内容;
4、通过执行 js 获取 code,写到 localstorage 中,再读取 code 内容;
5、通过执行 js 获取 code,写到 cookie 中,读取 cookie。
分析:
1、图片识别技术较难;
2、难以控制文件 ;
3、alert 弹框内容不太友好;
4、selenium 代码不能方便读取
5、selenium 可以读取 cookie
实现代码
读取验证码后,写cookie
// 将验证码写入cookie
public final static String GET_LOGINCODE_COOKIE_JS = "var str = sessionStorage.getItem('peo'); "
+ "document.cookie = 'code' +'=' +str " // 将验证码写入cookie
// + "alert(getCookie('code'))"
;
public static void writeCookiePutCode(WebDriver dr) {
JavascriptExecutor jsexc = (JavascriptExecutor) dr;
//将验证码写入cookie
jsexc.executeScript(Data.GET_LOGINCODE_COOKIE_JS);
jsexc.executeScript(savecode);
}
读取cookie获取验证码
public static String readCookieGetCode(WebDriver dr) {
Set<Cookie> cookies = dr.manage().getCookies();
String cookieStr = "";
if (!cookies.isEmpty()) {
for (Cookie cookie : cookies) {
if(cookie.getName().equals("code")){
cookieStr= cookie.getValue();
// System.out.println(cookie);
}
}
}
log.info("成功读取保存在cookie中的验证码");
return cookieStr;
}
这是个意外,验证码存到 sessionStorage 了。请问怎么识别验证码图片呢?