首页 > 编程语言 > 详细

spring-boot搭配selenium-chrome爬取页面

时间:2021-09-10 04:24:27      阅读:30      评论:0      收藏:0      [点我收藏+]

环境准备

  • selenium-java 依赖

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.0.0-alpha-6</version>
    </dependency>
    
  • 谷歌驱动准备

    [chrome-headless驱动淘宝下载地址][https://npm.taobao.org/mirrors/chromedriver/]

    版本对应所运行的环境浏览器的版本(demo 机器上的谷歌浏览器是93版本所以对应下载了93的win驱动)

代码编写

技术分享图片

  • chromeConfig.java

    @Component
    public class ChromeConfig {
    
        public static ChromeOptions getOptions() {
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.setHeadless(true);
            chromeOptions.addArguments("--no--sandbox","--disable-gpu","--disable-dev-shm-usage",
                    "blink-settings=imagesEnabled=false","--disable-javascript","--disable-plugins");
            return chromeOptions;
        }
    
    }
    
  • ChromeInit.java

    @Component
    public class ChromeInit implements ApplicationRunner {
    
        public  ChromeDriver driverweb;
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            driverweb=getDriver();
        }
        public static ChromeDriver getDriver() {
            //目录可以写进配置文件读取,这里方便测试直接写入了
            String path = "D:\\chromedriver.exe";
            System.setProperty("webdriver.chrome.driver",path);
            return new ChromeDriver(getOptions());
        }
    
    }
    
  • CityInfoService.java

    @Service
    public class CityInfoService {
    
        public static final String strUrl = "这里填写地址";
    
        @Resource
        ChromeInit chromeInit;
    
        /**
         * @param info url / code
         * @return
         * @throws InterruptedException
         */
        public Map<String, Object> getInformation(Map<String, String> info) throws InterruptedException {
            HashMap<String, Object> map = new HashMap<>();
            String url = info.get("url");
            String code = info.get("code");
    
            if ("" != code && code != null) {
                url = strUrl + code;
            }
            if ("".equals(url) || url == null) {
                map.put("code", 0);
                map.put("content", "url 或 code 必填其一");
                map.put("data", null);
                return map;
            }
            chromeInit.driverweb.get(url);
            Thread.sleep(100);
            //这里是获取浏览器session信息
            JSONObject jsonObject = JSON.parseObject(chromeInit.driverweb.getSessionStorage().getItem("key"));
            map.put("code", 1);
            map.put("content", "操作成功");
            map.put("data", jsonObject);
            return map;
        }
    
    }
    
    

    总结

    依据浏览器自动化工具selenium 实现模拟用户操作 ,从而可以爬取页面信息,编写自动操作脚本实现测试等。

    效率上和其他方法比略有不足,该方法并不常用。

    在匹配 selenium 和驱动 浏览器版本时要注意,版本不对会导致程序无法运行,增加排除负担。

spring-boot搭配selenium-chrome爬取页面

原文:https://www.cnblogs.com/wlc-blogs/p/15246478.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!