Selenium用法详解【cookies操作】【JAVA爬虫】

简介

本文主要讲解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);
    }


}

猜你喜欢

转载自blog.csdn.net/weixin_40986713/article/details/128605186