Java网络爬虫实操(7)

作者: 风行者1024 | 来源:发表于2018-03-05 10:54 被阅读67次

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

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

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

    1) 准备工作

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


    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) {
            }
        }
    }
    

    执行结果

    保存到本地的截屏图片

    4) 总结

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

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

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

    相关文章

      网友评论

        本文标题:Java网络爬虫实操(7)

        本文链接:https://www.haomeiwen.com/subject/lzhzxftx.html