Selenium+Java自動化之如何優雅繞過驗證碼

前言:

驗證碼問題對於每一個ui自動化的同窗而言,相信都是個蛋疼的問題,對於驗證碼的處理我我的不提倡破解,不要去想破解方法,這個驗證碼原本就是爲了防止別人自動化登陸的。若是大家公司的驗證碼很容易被你破解了,那麼只能說大家公司驗證碼級別不高,去建議開發提升驗證碼級別了。java

對於驗證碼,要麼是讓開發把驗證碼寫死(傳說中的萬能驗證碼),如:1234,要麼就是低調的儘可能繞過去。web

下面本文來介紹下如何繞過下圖驗證碼,進入博客園chrome

 

 

工具:

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

1、使用Fiddler抓包api

1.通常登錄網站成功後,會生成一個已登陸狀態的cookie,那麼只須要直接把這個值拿到,用selenium進行addCookie操做便可。cookie

2.能夠先手動登陸一次,而後抓取這個cookie,這裏咱們就須要用抓包工具fiddler了工具

3.先打開博客園登陸界面,手動輸入帳號和密碼(不要點登陸按鈕學習

4.打開fiddler抓包工具,此時再點博客園登陸按鈕網站

 

5.登陸成功後,再查看cookie變化,發現多了兩組參數,多的這兩組參數就是咱們想要的,copy出來,一會有用ui

 

 

 2、cookie操做spa

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);

3、參考代碼

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

相關文章
相關標籤/搜索