selenium(java)通過Cookie跳過登錄驗證碼

學習selenium的Cookie這一節,用了很多時間都沒有成功捕獲登錄信息實現自動登錄,如果只是單純使用getCookies()方法並不能獲取Cookie裏關鍵參數的name和value。,比如通過firebug,雖然可以看到www.baidu.com這個網頁的cookie內容,但是實際允許登錄的“BDUSS”這個參數並沒有在cookie內容裏體現。

最後還是搜到了蟲師的文章,詳細講了如何通過fiddler抓包工具獲取baidu的cookie的重要參數信息。

這裏再補充一下,由於Host爲"passport.baidu.com"的消息有很多條,需要找到Host爲"passport.baidu.com",URL爲v2/api/?login 的消息,查看右側窗口Response裏Set-Cookie的內容。

Cookie的處理分爲:

服務器向客戶端發送cookie

瀏覽器將cookie保存

之後每次http請求瀏覽器都會將cookie發送給服務器端

服務器端向客戶端發送Cookie是通過HTTP響應報文實現的,在Set-Cookie中設置需要像客戶端發送的cookie。



參考文章:通過Cookie跳過登錄驗證碼


準備工具:

------------------

fiddler

Python+selenium

------------------

以百度登錄爲例。

驗證碼是漢字的,我想通過程序識別起來有點難度,也會比較麻煩。

 

接下來開始動手。

1、開啓Fiddler 工具,像這樣!

 

2、通過瀏覽器登錄正常登錄百度賬號。像這樣!

 

3、通過Fiddler獲取登錄請求的Cookie。找到Host爲“passport.baidu.com”的URL,在右側窗口查看該請求的Cookie

然後,找到重要的兩個參數BAIDUID”和“BDUSS”。

 

4、編寫Selenium自動化測試腳本,跳過登錄。

複製代碼
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

# 添加Cookie
driver.add_cookie({'name':'BAIDUID','value':'AAAAAAAAAAAAAA:FG=1'})
driver.add_cookie({'name':'BDUSS','value':'AAAAAAAAAAAAAAAAAAAAAAAAAA'})

# 刷新頁面
driver.refresh()

# 獲取登錄用戶名並打印
username = driver.find_element_by_class_name("user-name").text
print(username)

#關閉瀏覽器
driver.quit()
複製代碼

首先,訪問百度首頁,處於未登錄狀態。

然後,通過Selenium所提供add_cookie()方法添加Cookie信息。

最後,刷新頁面,現在已經是登錄狀態了,獲取登錄之後的用戶名並打印。


附上自己用java實現的代碼:

package cookie;

import java.util.Set;

import org.apache.http.auth.UsernamePasswordCredentials;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class CookieBaidu {
	public static void main(String[] args) throws InterruptedException {
		WebDriver driver = new FirefoxDriver();
		driver.get("http://www.baidu.com");
		Thread.sleep(3000);
		System.out.println(driver.manage().getCookies());
		
		// 通過fiddler抓包工具,找到Host爲“passport.baidu.com”的URL,在右側窗口查看該請求的Cookie,
		// 找到重要的兩個參數“BAIDUID”和“BDUSS”
		Cookie c1 = new Cookie("BAIDUID", "66666666666666666666666:FG=1");
		Cookie c2 = new Cookie("BDUSS", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN~e-lnf3vpZc");
		
		driver.manage().addCookie(c1);
		driver.manage().addCookie(c2);
		
		driver.navigate().refresh();
		
		// 獲得登錄用戶名
		String username = driver.findElement(By.className("user-name")).getText();
		System.out.println("username = " + username);
		
		System.out.println(driver.manage().getCookies());
		
		Thread.sleep(3000);
		driver.quit();
		
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章