cdp4j使用记录
一、前言
- cdp4j
cdp4j是Java库,具有清晰简洁的API,可自动执行基于Chrome / Chromium的浏览器。它使用Google Chrome DevTools协议来自动化基于Chrome / Chromium的浏览器。
- 开发环境
- Google Chrome 浏览器
- JDK 1.8+
(其它要求,请查看 github 页面)
- 参考:
cdp4j(github):https://github.com/webfolderio/cdp4j
cdp4j-Samples(github):https://github.com/webfolderio/cdp4j/tree/master/src/io/webfolder/cdp/sample
cdp4j-javadoc:https://webfolder.io/cdp4j/javadoc/index.html
Chrome DevTools Protocol:
https://chromedevtools.github.io/devtools-protocol/
https://developers.google.com/web/updates/2017/04/headless-chrome
Google Chrome:https://www.google.cn/chrome/
Chrome 命令行参数:https://peter.sh/experiments/chromium-command-line-switches/
Java 正则表达式:https://www.runoob.com/java/java-regular-expressions.html
Jsoup官网: https://jsoup.org/
二、正文
- 下载并安装 Google Chrome 浏览器
- 添加依赖
<!-- https://mvnrepository.com/artifact/io.webfolder/cdp4j -->
<dependency>
<groupId>io.webfolder</groupId>
<artifactId>cdp4j</artifactId>
<version>3.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jvnet.winp/winp -->
<dependency>
<groupId>org.jvnet.winp</groupId>
<artifactId>winp</artifactId>
<version>1.28</version>
</dependency>
- 通过 chrome 的命令行参数,运行 headless 模式的 chrome 浏览器
“–disable-gpu”:不使用 GPU 加速
“–headless”:启动 chrome 的 headless 模式,即不会弹出浏览器界面
import static java.util.Locale.ENGLISH;
import io.webfolder.cdp.Launcher;
import io.webfolder.cdp.session.Session;
import io.webfolder.cdp.session.SessionFactory;
public class Bing {
public static void main(String[] args) {
Launcher launcher = new Launcher();
try (SessionFactory factory = launcher.launch(Arrays.asList("--disable-gpu", "--headless"));
Session session = factory.create()) {
session
.navigate("https://www.bing.com")
.waitDocumentReady()
.enableNetworkLog()
.click("input[type='search']")
.sendKeys("Microsoft")
.sendEnter()
.wait(1000);
String firstResult = session.getText("strong").toLowerCase(ENGLISH);
System.out.println("Query String : " + session.getQueryString());
System.out.println("Path name : " + session.getPathname());
System.out.println(firstResult);
} finally {
launcher.kill();
}
}
}