cdp4j is a web-automation library for Java. It can be used for automating the use of web pages and for testing web pages. It use Google Chrome DevTools Protocol to automate Chrome/Chromium based browsers.
- Supports full capabilities of the Chrome DevTools Protocol (tip-of-tree)
- Evaluate JavaScript
- Invoke JavaScript function
- Supports native CSS selector engine
- Supports Sizzle selector engine
- Supports XPath queries
- Incognito Browsing (private tab)
- Full page screen capture
- Trigger Mouse events (click etc...)
- Send keys (text, tab, enter etc...)
- Redirect log entries (javascript, network, storage etc...) from browser to slf4j
- Intercept Network (request & response)
- Upload file programmatically without third party solutions (does not requires AWT Robot etc...)
- get & set Element properties
- Supports Headless Chrome/Chromium
- Navigate back, forward, stop, reload
- clear cache, clear cookies, list cookies
- set & get values of form elements
- Supports event handling
Oracle & OpenJDK Java 8 & 9.
Both the JRE and the JDK are suitable for use with this library.
cdp4j is licensed as AGPL software.
Open Source != Free Software. The source may be viewable on GitHub but that doesn't mean anyone can use it for any purpose.
Buying a license is mandatory as soon as you develop commercial activities distributing the cdp4j software inside your product or deploying it on a network without disclosing the source code of your own applications under the AGPL license.
This library is suitable for use in production systems.
To use the official release of cdp4j, please use the following snippet in your pom.xml
file.
Add the following to your POM's <dependencies>
tag:
<dependency>
<groupId>io.webfolder</groupId>
<artifactId>cdp4j</artifactId>
<version>2.2.4</version>
</dependency>
Using development (SNAPSHOT) version:
<dependency>
<groupId>io.webfolder</groupId>
<artifactId>cdp4j</artifactId>
<version>2.2.5-SNAPSHOT</version>
</dependency>
cdp4j-2.2.4.jar - 811 KB
cdp4j-2.2.4-sources.jar - 515 KB
cdp4j has been tested under Windows 10 and Ubuntu, but should work on any platform where a Java & Chrome/Chromium available.
cdp4j can be run in "headless" mode using with Headless Chrome.
# https://askubuntu.com/questions/79280/how-to-install-chrome-browser-properly-via-command-line
sudo apt-get install libxss1 libappindicator1 libindicator7
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb # Might show "errors", fixed by next line
sudo apt-get install -f
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
sudo yum install google-chrome-stable_current_*.rpm
Test headless Chrome
google-chrome --headless --remote-debugging-port=9222 --disable-gpu
Simple logger for Java (SLF4J) is supported.
- Avoid external dependencies as much as possible.
- Support only Chrome/Chromium based browsers.
- Supports full capabilities of the Chrome DevTools Protocol.
- Keep the API simple.
cdp4j use W3C selector engine which is default selector engine of Chrome/Chromium. Alternatively Sizzle selector engine might be used. Sizzle is the css selector engine of JQuery and it supports extra selectors like :has(div), :text, contains(text) etc. Check the Sizzle.java for using sizzle with cdp4j.
Launcher launcher = new Launcher();
try (SessionFactory factory = launcher.launch();
Session session = factory.create()) {
session.navigate("https://webfolder.io");
session.waitDocumentReady();
String content = (String) session.getProperty("//body", "outerText");
System.out.println(content);
}
Launcher launcher = new Launcher();
Path file = createTempFile("screenshot", ".png");
try (SessionFactory factory = launcher.launch();
Session session = factory.create()) {
session.navigate("https://news.ycombinator.com");
session.waitDocumentReady();
// activate the tab/session before capturing the screenshot
session.activate();
byte[] data = session.captureScreenshot();
write(file, data);
}
if (isDesktopSupported()) {
getDesktop().open(file.toFile());
}
Launcher launcher = new Launcher();
Path file = createTempFile("webfolder-linux-setup", ".pdf");
try (SessionFactory factory = launcher.launch(asList("--headless", "--disable-gpu"))) {
String context = factory.createBrowserContext();
try (Session session = factory.create(context)) {
session.navigate("https://webfolder.io?cdp4j");
session.waitDocumentReady();
session.wait(1000);
byte[] content = session
.getCommand()
.getPage()
.printToPDF();
write(file, content);
if (isDesktopSupported()) {
getDesktop().open(file.toFile());
}
}
}
# Assume that you have `google-chrome` in your $PATH
mvn install
# If you use different version of Google Chrome like Chromium, Chrome Canary,
# then you must explicitly use the `chrome_binary` property to make the code work.
mvn install -Dchrome_binary=/path/to/your/google-chrome
# e.g. For some Linux distribution
mvn install -Dchrome_binary=/usr/lib/chromium-dev/chromium-dev
# e.g. MacOS it may be something like
mvn install -Dchrome_binary=/Applications/Chromium.app/Contents/MacOS/Chromium
# To run the existing tests try
mvn test -Dchrome_binary=/usr/lic/chromium-dev/chromium-dev
cdp4j is regularly built and tested on circleci and AppVeyor.
Please follow cdp4j Contributor's Guide.
You can support cdp4j development by buying support package. Please contact us for support packages & pricing.