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

环境准备

  • 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驱动)

代码编写

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

  • 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爬取页面

上一篇:百度攻城狮训练营2021-工程能力study4 -- 4.2 单元测试之Java实践 脑图整理


下一篇:git tag