zoukankan      html  css  js  c++  java
  • Selenium+Java自动化之如何优雅绕过验证码

    前言:

    验证码问题对于每个ui自动化的同学而言,相信都是个蛋疼的问题,对于验证码的处理我个人不提倡破解,不要去想破解方法,这个验证码本来就是为了防止别人自动化登录的。如果你们公司的验证码很容易被你破解了,那么只能说你们公司验证码级别不高,去建议开发提高验证码级别了。

    对于验证码,要么是让开发把验证码写死(传说中的万能验证码),如:1234,要么就是低调的尽量绕过去。

    下面本文来介绍下如何绕过下图验证码,进入博客园

     

    工具:

    • Fiddler.exe
    • IDEA/Eclipse
    • selenium的cookie操作

    一、使用Fiddler抓包

    1.一般登陆网站成功后,会生成一个已登录状态的cookie,那么只需要直接把这个值拿到,用selenium进行addCookie操作即可。

    2.可以先手动登录一次,然后抓取这个cookie,这里我们就需要用抓包工具fiddler了

    3.先打开博客园登录界面,手动输入账号和密码(不要点登录按钮

    4.打开fiddler抓包工具,此时再点博客园登录按钮

    5.登录成功后,再查看cookie变化,发现多了两组参数,多的这两组参数就是我们想要的,copy出来,一会有用

     

     二、cookie操作

    1.这里需要添加两个cookie,一个是.CNBlogsCookie,另外一个是.Cnblogs.AspNetCore.Cookies。

    2.我这里打开的网页是博客园子的首页:https://home.cnblogs.com/,没进入登录页。

    3.添加cookie后刷新页面,接下来就是见证奇迹的时刻了。

    4.关于cookie操作,有兴趣的同学可查看官方api

    5.这里我们只使用addCookie这个接口的方法实现

    Cookie cookie=new Cookie("key", "value");
    driver.manage().addCookie(cookie);

    三、参考代码

    package com.test.demo;
    
    import org.openqa.selenium.Cookie;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.annotations.Test;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.AfterClass;
    
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    
    /**
     * @author longrong.lang
     * 绕过验证码登陆
     */
    public class LoginWithCookie {
    
        WebDriver driver;
    
        @BeforeClass
        public void beforeClass() {
            System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
            driver = new ChromeDriver();
    
        }
    
        @Test
        public void testLoginWithCookie() {
            driver.get("https://home.cnblogs.com/");
            driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            //cookie遍历使用
            Set<Cookie> cookies = driver.manage().getCookies();
            for (Cookie cookie : cookies) {
                System.out.println(cookie.getName() + "	" + cookie.getValue());
            }
            Cookie cookie = new Cookie("key", "value");
            //添加cookie操作
            driver.manage().addCookie(cookie);
            Cookie cookie1 = new Cookie("key", "value");
            driver.manage().addCookie(cookie1);
            Cookie cookie2 = new Cookie(".key", "value");
            driver.manage().addCookie(cookie2);
            Cookie cookie3 = new Cookie("key", "value");
            driver.manage().addCookie(cookie3);
            driver.manage().window().maximize();
            //下面是见证奇迹的时候了
            driver.navigate().refresh();
        }
    
        @AfterClass
        public void afterClass() {
            //driver.quit();
        }
    
    }

    效果图:

    有几点需要注意:

    1.登录时候要勾选下次自动登录按钮。

    2.add_cookie()只添加name和value,对于博客园的登录是不成功。

    3.本方法并不适合所有的网站,一般像博客园这种记住登录状态的才会适合

    学习过程中有遇到疑问的,可以加selenium(java) QQ群交流:631646987

  • 相关阅读:
    深入了解CSS字体度量,行高和vertical-align
    解决ios手机上传竖拍照片旋转90度问题
    HTML5图片上传本地预览
    前端本地文件操作与上传
    前端基础进阶(一):内存空间详细图解
    js小知识-数组去重
    SQL Server物化视图学习笔记
    MindMaster学习笔记
    c#Lock学习笔记
    oauth2.0学习笔记(摘抄简化)
  • 原文地址:https://www.cnblogs.com/longronglang/p/9512229.html
Copyright © 2011-2022 走看看