selenium+java+cookie登录

简易版:

之前写过登录的时候需要验证码,如何获取验证码登录,但是今天写公司网站的自动化测试代码时发现,登录后去商详页购买,浏览器没有保存登录信息,还需要再次登录,查了一下资料,发现还有另外一种方式,直接给cookie赋值,具体看下面

1.用抓包工具抓包,登录前和登录后看一下cookie的变化,有变化或者多出来的那个就是我们要保存的cookie,抓包工具哪个都可以,我用的是fildder
在这里插入图片描述
在这里插入图片描述
2.将抓包出来的cookie保存起来,代码如下:
package com;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
 
public class TestCookie {
	 
	public static void  main (String[] args) throws InterruptedException {
		
		//指定驱动路径
		System.setProperty("webdriver.chrome.driver", ".\\chromedriver.exe");
		//初始化一个谷歌浏览器名称为 driver
		WebDriver driver = new ChromeDriver();
		//窗口最大化
		driver.manage().window().maximize();
		//打开网址
		driver.get("http://www.baidu.com");
		
		// 通过fiddler抓包工具,找到Host为“passport.baidu.com”的URL,在右侧窗口查看该请求的Cookie,
		// 找到重要的两个参数“BAIDUID”和“BDUSS”
		Cookie c1 = new Cookie("BAIDUID","值");
		Cookie c2 = new Cookie("BDUSS","值");
		
		driver.manage().addCookie(c1);
		driver.manage().addCookie(c2);
		//刷新页面 
		driver.navigate().refresh();
		//获取登录用户名
		String username =driver.findElement(By.className("user-name")).getText();
		//打印登录用户名
		System.out.println("百度ID is :"+username);
		Thread.sleep(3000);
		driver.quit();
    }
}
  •  

3.运行后,就跳过登录了
在这里插入图片描述

复杂版:

执行接口测试或者某些自动化测试时,为了避免每次访问接口都需要登录操作,可以用访问接口时,把cookies信息传过去。

思路是先登录一次页面,获取到cookies信息,把cookies信息保存到本地文件,以后再访问页面时直接拿本地的cookies文件传过去

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

package com.gmsd;

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Set;

import java.util.StringTokenizer;

 

import org.openqa.selenium.By;

import org.openqa.selenium.Cookie;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

 

/**

 * @author QiaoJiaofei

 * @version 创建时间:2015年7月2日 上午10:29:54

 * 类说明

 */

public class TestCookie {

     

    WebDriver dr = null;

     

    public static void main(String args[]) {

         

        TestCookie t = new TestCookie();

        t.wtriteC();

        t.getC();

    }

    public void wtriteC() {

        System.setProperty("webdriver.chrome.driver""D:/BaiduYunDownload/selenium/chromedriver.exe");

        dr = new ChromeDriver();

        dr.get("http://172.16.30.209:5555/login.shtml");

         

        dr.findElement(By.id("inputEmail")).sendKeys("18600363820");

        dr.findElement(By.id("inputPassword")).sendKeys("123456");

        dr.findElement(By.id("denglu")).click();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

 

         

        File file = new File("D:/JavaTestFile/TestCookies.txt");

                 

        Set<Cookie> s = dr.manage().getCookies();

         

         

        if(file.exists()) {

            file.delete();

            try {

                file.createNewFile();

 

            catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        try {

            FileWriter fw = new FileWriter(file);

            BufferedWriter bw = new BufferedWriter(fw);

            for(Cookie c:s) {

                bw.write(c.getDomain()+";"+c.getName()+";"+c.getValue()+";"+c.getPath()+";"+c.getExpiry()+";"+c.isSecure());

                bw.newLine();

            }

            bw.flush();

            bw.close();

            fw.close();

        catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        dr.quit();

    }

    public void getC() {   

        System.setProperty("webdriver.chrome.driver""D:/BaiduYunDownload/selenium/chromedriver.exe");

        dr = new ChromeDriver();

        dr.get("http://172.16.30.209:5555");

        File file = new File("D:/JavaTestFile/TestCookies.txt");

        try {

            FileReader fr = new FileReader(file);

            BufferedReader br = new BufferedReader(fr);

            String line = null;

            while((line=br.readLine())!=null) {

             

                 

                String [] sz = line.split(";");

                String doman =  sz[0].trim();

                String name = sz[1].trim();

                String value = sz[2].trim();

                String path = sz[3].trim();

                Date date = null;

 

                if(!(sz[4].equals("null"))){   

                    date = new Date(sz[4]);

                    //System.out.println("date="+date);

 

                }

                Boolean bl = Boolean.valueOf(sz[5]);

             

                 

                Cookie ck = new Cookie(name,value,doman,path,date,bl);

                dr.manage().addCookie(ck);

            }

        catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

         

        dr.get("http://172.16.30.209:5555");

        //dr.quit();

    }

}

  

1

writerC()方法是获取cookies并存到本地文件,主要使用selenium的Set<Cookie> s = dr.manage().getCookies();

1

getC()方法是从本地文件读取cookies信息,主要使用

Cookie ck = new Cookie(name,value,doman,path,date,bl);
dr.manage().addCookie(ck);

注意几点:

1、Cookie的构造方法的参数是有顺序的

2、getC()调用了两次url,第一次是往url传cookies,第二次是为了刷新,也可使用dr.navigate().refresh();

 

Java中使用Selenium WebDriver操作Chrome浏览器并携带cookies,你需要先确保安装了ChromeDriver,并配置好WebDriver的路径。以下是基本步骤: 1. **设置ChromeOptions**: 首先创建一个`ChromeOptions`实例,然后添加`addArguments()`方法以传递命令行参数,其中包含`--load-extension`选项用于加载cookies文件。 ```java ChromeOptions chromeOptions = new ChromeOptions(); // 添加加载cookies的参数 String extensionPath = "path_to_your_cookies.json"; // 替换为实际cookies文件的路径 chromeOptions.addArgument("--load-extension=" + extensionPath); ``` 2. **初始化WebDriver**: 使用`DesiredCapabilities`选择Chrome浏览器,并将`chromeOptions`传入创建的`WebDriver`实例。 ```java DesiredCapabilities capabilities = DesiredCapabilities.chrome(); capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions); WebDriver driver = new ChromeDriver(capabilities); driver.get("http://example.com"); // 打开网页 ``` 3. **加载cookies**: 确保cookies文件是一个JSON格式的文件,里面存储了键值对。Selenium并不能直接读取文件内容,所以需要手动解析文件并设置到`DriverManager`上。 ```java Map<String, String> cookies = parseCookiesFromJsonFile(extensionPath); // 自定义方法解析json for (Map.Entry<String, String> cookie : cookies.entrySet()) { Cookie c = new Cookie(cookie.getKey(), cookie.getValue()); ((TakesCookies) driver).manage().addCookie(c); // (TakesCookies) 是WebDriver接口的一种实现 } ``` 4. **执行任务**: 现在你可以像平时一样使用`driver`来浏览网站了,因为cookies已经加载到了浏览器中。 注意:在实际项目中,可能会遇到权限问题导致无法从本地文件系统加载cookies,这时可以考虑将cookies作为命令行参数传递给Chrome进程,或者使用其他方式如环境变量等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值