selenium(java)通过Cookie跳过登录验证码

来源:互联网 发布:hangman游戏 java 编辑:程序博客网 时间:2024/06/06 02:16

学习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 webdriverdriver = webdriver.Chrome()driver.get("https://www.baidu.com")# 添加Cookiedriver.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").textprint(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();}}


原创粉丝点击