WebDriver 提供了一系列 Cookies 的操作来获取、填写、删除 Cookies 的方法,节省了多次在登陆页面的查找元素并填写登录信息的时间。

1)获取 Cookies ,并保存到文件中以备后续使用

package com.learningselenium.normalwebdriver;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.FileReader;

import java.util.Date;

import java.util.StringTokenizer;

import org.openqa.selenium.By;

import org.openqa.selenium.Cookie;

import org.openqa.selenium.Webdriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class testGetCookies{

  public static void main(String... args){

    WebDriver driver = new FirefoxDriver();

    driver.get("http://zhizhu.com/#signin");

    //填写用户信息,然后登陆

    driver.findElement(By.name("email")).sendKeys("seleniumcookies@126.com");

    driver.findElement(By.name("password").sendKeys("cookies123"));

    if(driver.findElement(By.name("rememberme")).isSelected()){

      driver.findElement(By.name("remermberme")).click();

    }

    driver.findElement(By.className("sign-button")).click();

    

    File cookieFile = new File("zhizhu.cookie.txt");

    try{

      cookieFile.delete();

      cookieFile.createNewFile();

      FileWriter fileWriter = new FileWriter(cookieFile);

      BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

      for (Cookie cookie : driver.manage().getCookies()){

        bufferedWriter.write((cookie.getName() + ";" + cookie.getDomain() + ";" + cookie.getExpiry() + ";" + cookie.isSecure()));

        bufferedWriter.newLine();

      }

      bufferedWriter.flush();

      bufferedWriter.close();

      fileWriter.close();

    }catch (Exception ex){

      ex.printStackTrace();

    }

    driver.quit();

  }

}

2)读取保存的Cookies 信息并自动填充到新打开的浏览器 Cookies 中,然后直接进入登陆状态后的页面

public class testAddCookies{

  private static BufferedReader bufferedReader;

  public static void main(String... args){

    WebDriver driver = new FirefoxDriver();

    driver.get("http://zhizhu.com/#signin");

    try{

      File cookieFile = new File("zhihu.cookie.txt");

      FileReader fr = new FileReader(cookieFile);

      bufferedReader = new BufferedReader(fr);

      String line;

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

        StringTokenizer stringTokenizer = new StringTokenizer(line, ";");

        while (stringTokenizer.hasMoreTokens()){

          String name = stringTokenizer.nextToken();

          String value= stringTokenizer.nextToken();

          String domain = stringTokenizer.nextToken();

          String path = stringTokenizer.nextToken();

          Date expiry = null;

          String dt;

          if(! (dt = stringTokenizer.nextToken()).equals("null")){

            expiry = new Date(dt);

          }

          boolean isSecure = new Boolean(stringTokenizer.nextToken()).booleanVaue();

          Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure);

        }

      }

    }catch(Exception ex){

      ex.printStackTrace();

    }

    driver.get("http://www.zhihu.com");

}    

[Selenium] 操作浏览器 Cookies的更多相关文章

  1. selenium操作浏览器cookies

    package test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; imp ...

  2. [Python爬虫]使用Selenium操作浏览器订购火车票

    这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分 [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium) [Python爬虫]使用Python爬取静态网页-斗 ...

  3. 每次用 selenium 操作浏览器都还原了 (比如没有浏览器历史记录)

    每次用 selenium 操作浏览器都还原了 (比如没有浏览器历史记录)

  4. selenium操作浏览器cookie方法

    /**     * 操作浏览器的cookie     */        @Test    public void testCookie()throws Exception{        drive ...

  5. selenium操作浏览器的前进和后退

    前进关键字:driver.forward() 后退关键字:driver.back() 测试对象:1.https://www.baidu.com/ 2.https://www.sogou.com/ 实例 ...

  6. 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API

    目录 1.导入Selenium库 2.创建浏览器对象 3.浏览器窗口大小设置 4.浏览器位置设置 5.请求访问网址 6.浏览器页面前进.后退和刷新 7.关闭浏览器 相比于高大上的各种Selenium进 ...

  7. 『心善渊』Selenium3.0基础 — 17、Selenium操作浏览器窗口的滚动条

    目录 1.为什么操作滚动条 2.Selenium如何操作滚动条 3.Selenium操作滚动条方法 4.操作滚动条示例 5.下拉至聚焦元素的位置 (1)实现步骤: (2)实现示例: 1.为什么操作滚动 ...

  8. 『心善渊』Selenium3.0基础 — 18、使用Selenium操作浏览器的弹窗

    目录 1.操作浏览器自带弹窗 2.操作浏览器页面自定义弹窗 1.操作浏览器自带弹窗 (1)说明: webdriver中处理JavaScript所生成的alert.confirm 以及prompt 弹窗 ...

  9. Selenium+java操作浏览器cookies

    描述:登录CSDN,将登录信息cookies保存到文件,再次打开网页时,直接利用文件中的数据登录. 1. 获取cookies并保存到文件 步骤: ① 打开CSDN的登录界面: ② 填写用户名和密码: ...

随机推荐

  1. android apk程序升级

    1 .设置apk版本号 Androidmanifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/ ...

  2. 洛谷 P2613 【模板】有理数取余

    P2613 [模板]有理数取余 题目描述 给出一个有理数c=\frac{a}{b}c=ba​,求c\ \bmod 19260817c mod19260817的值. 输入输出格式 输入格式: 一共两行. ...

  3. 如何使用KeyChain保存和获取UDID - Flex/AS Programmer

    原文 http://www.cnblogs.com/yssgyw/p/3364370.html 本文是iOS7系列文章第一篇文章,主要介绍使用KeyChain保存和获取APP数据,解决iOS7上获取不 ...

  4. sklearn preprocessing data(数据预处理)

    参考: http://scikit-learn.org/stable/modules/preprocessing.html

  5. HDU oj 开门人与关门人

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1234 #include<stdio.h> #include<string.h> ...

  6. 【转载】C#中回滚TransactionScope的使用方法和原理

    TransactionScope只要一个操作失败,它会自动回滚,Complete表示事务完成 实事上,一个错误的理解就是Complete()方法是提交事务的,这是错误的,事实上,它的作用的表示本事务完 ...

  7. windows核心编程之进程间共享数据

    有时候我们会遇到window进程间共享数据的需求,例如说我想知道系统当前有多少某个进程的实例. 我们能够在程序中定义一个全局变量.初始化为0.每当程序启动后就加1.当然我们我们能够借助第三方介质来储存 ...

  8. hibernate的查询缓存和二级缓存的配合使用

    我的上一篇博客Hibernate缓存体系之查询缓存(query cache),以及list和iterate方法的差别介绍了查询缓存的概念,以及list和iterate的差别.读者可能注意到:那篇博客測 ...

  9. Java单例的实现

    1.声明实例变量(静态) 2.私有化构造函数 3.创建获取实例的方法 public class Singleton{ //创建实例变量 private static Singleton singlet ...

  10. boost::serialization 用基类指针转存派生类(错误多多,一波三折)

    boost::serialization 也支持c++的多态,这样我们就能够通过使用基类的指针来转存派生类, 我们接着上一篇( boost::serialization(2)序列化基类 )的样例来看: ...