Java网络爬虫实操(7)

上一篇:Java网络爬虫实操(6)

大家好,我们平常浏览网页经常会看到这样的效果:鼠标滚动到差不多底部的时候,才会加载新内容出来。然后一直滚就一直加载,比如外卖平台上的评价信息、社交平台上的跟贴等等。

本篇文章介绍如何用seleinum技术模拟人对浏览器的操作

1) 准备工作

  • 更新爬虫框架NetDiscovery,我们基于框架进行演示
  • 下载对应的浏览器driver程序,比如chrome的chromedriver,官方下载,镜像下载
  • 注意:driver程序一定要和浏览器版本匹配,建议直接装最新的chrome和chromedriver(当前最新版本是2.36),如果是其他浏览器的话,也一样的
  • 目标:打开一个网页窗口,显示内容并最大化,往下拉后加载出新的内容,最终对当前网页截屏,在本地生成一个图像文件


    Java网络爬虫实操(7)_第1张图片

2) 程序实现逻辑

  • 根据浏览器类型创建相应的对象new ChromeDriver(),并附上相应的action
  • 通过chromedriver驱动程序打开本地的chrome浏览器
  • 用内置的js方法window.scrollBy()模拟人下拉网页的操作
  • 用driver自带的getScreenshotAs()实现对网页截图

3) 写代码

Main类

package com.cv4j.netdiscovery.example;

import com.cv4j.netdiscovery.core.Spider;
import com.cv4j.netdiscovery.selenium.Browser;
import com.cv4j.netdiscovery.selenium.downloader.SeleniumDownloader;
import org.openqa.selenium.WebDriver;

public class TestSelenium {

    public static void main(String[] args) {
        //设置浏览器的驱动程序
        WebDriver driver = Browser.Chrome.init("example/chromedriver.exe");
        //创建downloader类和action
        ScrollAction scrollAction = new ScrollAction();
        SeleniumDownloader seleniumDownloader = new SeleniumDownloader(driver, scrollAction);
        //设置并启动爬虫
        Spider.create()
                .name("testseleinum")
                .url("https://www.ele.me/shop/1919756/rate")
                .downloader(seleniumDownloader)
                .run();
    }
}

SeleniumAction类

package com.cv4j.netdiscovery.example;

import com.cv4j.netdiscovery.selenium.SeleniumAction;
import com.cv4j.netdiscovery.selenium.Utils;
import org.openqa.selenium.WebDriver;

public class ScrollAction implements SeleniumAction {

    @Override
    public void execute(WebDriver driver) {
        try {
            //最大化
            driver.manage().window().maximize();
            //停顿2秒
            Thread.sleep(2000);
            //往下滚动200px
            Utils.scroll(driver, 200);
            //对当前网页截屏
            Utils.taskScreenShot(driver, "D:\\work\\test.png");
        } catch(InterruptedException e) {
        }
    }
}

执行结果

Java网络爬虫实操(7)_第2张图片
保存到本地的截屏图片

4) 总结

seleinum本质上是一种自动化测试工具,在爬虫技术中主要用来模拟人对浏览器的操作,理论上人通过鼠标键盘操作的所有过程,都可以用程序代码模拟出来,然后获取我们想要的网页数据。

试用下来发现NetDiscovery框架对seleinum操作的支持还比较简单,我会继续关注。

下一篇:Java网络爬虫实操(8)

你可能感兴趣的:(Java网络爬虫实操(7))