意外

获取登录验证码实践 (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 了。请问怎么识别验证码图片呢?


↙↙↙阅读原文可查看相关链接,并与作者交流