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

}


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