环境准备
-
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 和驱动 浏览器版本时要注意,版本不对会导致程序无法运行,增加排除负担。