简介
本文主要讲解java代码利用Selenium控制浏览器获取网站的cookies,对网站cookies的相关操作教程。
cookies操作
cookies 是识别用户登录与否的关键,爬虫中常常使用 selenium + jsoup 实现 cookie持久化,即先用 selenium 模拟登陆获取 cookie ,再通过 jsoup 携带 cookie 进行请求。
webdriver 提供 cookies 的几种操作:读取、添加删除。
getCookies:以字典的形式返回当前会话中可见的 cookie 信息。
getCookieNamed(name):返回 cookie 字典中 key == name 的 cookie 信息。
addCookie(cookie):将 cookie 添加到当前会话中
deleteCookieNamed(name):删除指定名称的单个 cookie。
deleteCookie(cookie):删除单个 cookie。
deleteAllCookies():删除会话范围内的所有 cookie。
下面看一下简单的示例,演示了它们的用法。
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import java.awt.*;
import java.io.IOException;
import java.util.Set;
public class SeleniumDemo {
private final static String webDriver = "webdriver.chrome.driver";
private final static String webDriverPath ="E:\\chromedriver\\chromedriver.exe";
public static void main(String[] args) throws InterruptedException{
System.setProperty(webDriver, webDriverPath);
WebDriver driver= new ChromeDriver();
driver.get("https://tarzan.blog.csdn.net/");
Thread.sleep(2000);
//输出所有cookies
Set<Cookie> cookies= driver.manage().getCookies();
System.out.println("所有cookie");
cookies.forEach(e-> System.out.println(e));
//创建cookie
Cookie cookie1=new Cookie("name1","test1");
Cookie cookie2=new Cookie("username","test2");
//添加cookie
driver.manage().addCookie(cookie1);
driver.manage().addCookie(cookie2);
//输出cookie名为name1的cookie
System.out.println("cookie名为name1的cookie");
System.out.println(driver.manage().getCookieNamed("name1"));
//删除cookie名为name1的cookie
driver.manage().deleteCookieNamed("name1");
//删除cookie2
driver.manage().deleteCookie(cookie2);
//删除所有的cookie
driver.manage().deleteAllCookies();
}
}
下面是selenium + jsoup 结合的代码示例,代码做了简化,一般来说需要用selenium 控制浏览器输入用户名和密码后登录网站,再获取带有用户鉴权信息的token后,给到jsoup,这样就可以正常访问网页了,你也可以爬下网站的接口,利用java httpclient等,请求接口获取数据。
jsoup 适合从网站响应的html内容中拿数据,httpclient 适合从网站的接口拿数据。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.IOException;
import java.util.Set;
public class SeleniumDemo {
private final static String webDriver = "webdriver.chrome.driver";
private final static String webDriverPath ="E:\\chromedriver\\chromedriver.exe";
public static void main(String[] args) throws InterruptedException, IOException {
System.setProperty(webDriver, webDriverPath);
WebDriver driver= new ChromeDriver();
driver.get("https://tarzan.blog.csdn.net/");
Thread.sleep(2000);
Set<Cookie> cookies= driver.manage().getCookies();
StringBuffer cookieBuffer=new StringBuffer();
cookies.forEach(e-> cookieBuffer.append(e.getName()).append("=").append(e.getValue()).append(";"));
System.out.println(cookieBuffer);
Document document=Jsoup.connect("https://tarzan.blog.csdn.net/").header("cookie", cookieBuffer.toString()).get();
System.out.println(document);
}
}