前言:
驗證碼問題對於每個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