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() + "\t" + 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM