webmagic ----eclipse模拟登录(通过Selenium)

本文章是上一篇文章的第二种方法(依旧是需要登录才能爬去取所需数据的一个小demo)

方法一比较简单也有点麻烦因为需要自己手动添加cookie(见上篇文章):https://blog.csdn.net/weixin_42162388/article/details/81352169
方法二:这个方法开始介绍通过Selenium模拟登录爬虫
要想在eclipse中使用selenium,必须首先搭建好基于Selenium的自动化环境,这步骤在之前写的文章中有详细介绍(点击此处查看搭建Selenium环境)
然后就可以开始写代码了(这里模拟登录后爬取)

package linll.cn.PageProcessor.Maven;

import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;

public class CsdnLoginSelenium implements PageProcessor {
    private Set cookies;
    private Site site = Site.me().setRetryTimes(3).setSleepTime(0).setTimeOut(3000);


    @Override
    public void process(Page page) {
        System.out.println(page.getHtml().xpath("//div[@class='opt-box d-flex justify-content-end']/a[2]/text()").toString());
    }

    @Override
    public Site getSite() {
        // TODO Auto-generated method stub
        for(Cookie cookie:cookies) {
            site.addCookie(cookie.getName().toString(), cookie.getValue().toString());
        }
        return site;
    }

    public void Login() {

        System.setProperty("webdriver.chrome.driver",
                "D:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://passport.csdn.net/account/login");
        driver.findElement(By.className("login-part")).findElement(By.tagName("a")).click();

        // 防止页面未能及时加载出来而设置一段时间延迟
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        driver.findElement(By.id("username")).sendKeys("用户名");
        driver.findElement(By.id("password")).sendKeys("密码");
        driver.findElement(By.className("logging")).click();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        cookies=driver.manage().getCookies();

           driver.close();
    }

    public static void main(String[] args) {
        CsdnLoginSelenium csdn = new CsdnLoginSelenium();
        csdn.Login();
        Spider.create(csdn).addUrl("https://blog.csdn.net/weixin_42162388").thread(5).run();

    }
}

运行结果图:
首先回自己条到浏览器登录界面登录,随后爬取到如下数据
webmagic ----eclipse模拟登录(通过Selenium)_第1张图片

你可能感兴趣的:(程序)