如何用 selenium + jsoup 登陆网站获取cookies

本文介绍了一种利用Selenium和Jsoup进行网页登录的方法,详细展示了如何配置ChromeDriver并使用Jsoup发送登录请求及获取Cookies。

第一次发博客,如有雷同纯属故意。

最近需要扒取一个网站页面数据,网上查了很多资料,最后选择用selenium 和 jsoup。

闲话少说,开工:

要扒数据,先得登陆网站,如何登陆,流程如下:

首先是jar仓库:

<dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>[3.0.1,)</version>//获取最新的版本库
    </dependency> 
    <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.8.2</version>
            <type>jar</type>
        </dependency>

代码:

public static void getIndex2() {

         //之前运行程序发现生成了N多个chrome driver进程,搞不懂为什么会有那么多进程产生,网上查了下,说起这个service有用,拿来试下,效果未知
         ChromeDriverService service = new ChromeDriverService.Builder().usingDriverExecutable(new File("./driver/chromedriver.exe")).usingAnyFreePort().build();
        try {
            service.start();
        } catch (IOException ex) {
            Logger.getLogger(kechengbiaoIndex.class.getName()).log(Level.SEVERE, null, ex);
        }

//end

//正式开始

//先定义浏览器驱动,我用chrome浏览器,网上下载一个chromedriver.exe,启动时需要加载
        System.getProperties().setProperty("webdriver.chrome.driver", "./driver/chromedriver.exe");

//打开浏览器
        WebDriver webDriver = new ChromeDriver();
        try {

//需先打开登录页面,
            webDriver.get("http://www.*****.com/loginnew.asp");
            webDriver.manage().deleteAllCookies();

//jsoup获取登录后的cookies

           Map cookies =getLoginCookeis();

//将cookies放入浏览器
            for (Object entry : cookies.keySet()) {
                Cookie cookie = new Cookie(entry + "", cookies.get(entry) + "");
                webDriver.manage().addCookie(cookie);
            }

            webDriver.get("http://www.******.com/***.asp");//登录后的页面

//TODO:通过操作webDriver操作页面,解析获取数据


        } catch (InterruptedException ex) {
            Logger.getLogger(kechengbiaoIndex.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
             webDriver.close();
        }


        service.stop();
    }



 private static Integer TIMEOUT = 10000;
    private static String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36";
    private static String URL="登陆请求发送的url";

public static Map getLoginCookeis(){
         try {

//此处数据需要在页面上登陆页面,测试一下,获取登录时发送的登陆请求数据
            Map map = new HashMap();
            map.put("username", "用户名");
            map.put("password", "密码");
            map.put("Action", "Login");
            map.put("Submit.x", "40");
            map.put("Submit.y", "15");


            Map map1 = new HashMap();
            map1.put("ASPSESSIONIDASBTBDDT", "ACABMBFDKBGHOLHBHMKKMHLA");
            map1.put("Sailing", "Skin=");
            map1.put("wwwkechengbiaonetjecas", "UserName=%D5%C5%C8%CB%C0%FB&AdminLoginCode=&AdminName=%D5%C5%C8%CB%C0%FB&LastPassword=v0rdu3g775Uqy735&UnreadMsg=&UserPassword=877b0591474be1fb&RndPassword=v0rdu3g775Uqy735&AdminPassword=877b0591474be1fb");


//发送登录请求
            Connection.Response  rs=Jsoup.connect(URL)
                    .postDataCharset("GB2312")//编码格式
                    .data(map)//请求参数
                    .userAgent(USER_AGENT)
                    .cookies(map1)//cookies
                    .timeout(TIMEOUT)//超时
                    .method(Connection.Method.POST)
                    .execute();
            map1=rs.cookies();//获取登录的cookies
            
            return map1;
        } catch (IOException ex) {
            Logger.getLogger(KechengbiaoLogin.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值