GithubHelp home page GithubHelp logo

tengda100 / cdp4j Goto Github PK

View Code? Open in Web Editor NEW

This project forked from safrizal/cdp4j

0.0 0.0 0.0 1.11 MB

cdp4j - Chrome DevTools Protocol for Java

Home Page: https://webfolder.io/cdp4j.html

License: GNU Affero General Public License v3.0

Java 99.74% HTML 0.24% JavaScript 0.02%

cdp4j's Introduction

cdp4j - Chrome DevTools Protocol for Java

License circleci AppVeyor Codacy Badge CLA assistant

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.

Features

  • 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

Supported Java Versions

Oracle & OpenJDK Java 8 & 9.

Both the JRE and the JDK are suitable for use with this library.

Licensing

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.

Stability

This library is suitable for use in production systems.

Integration with Maven

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.1.5</version>
</dependency>

Using development (SNAPSHOT) version:

<dependency>
    <groupId>io.webfolder</groupId>
    <artifactId>cdp4j</artifactId>
    <version>2.2.0-SNAPSHOT</version>
</dependency>

Download

cdp4j-2.1.5.jar - 783 KB

cdp4j-2.1.5-sources.jar - 490 KB

Supported Platforms

cdp4j has been tested under Windows 10 and Ubuntu, but should work on any platform where a Java & Chrome/Chromium available.

Headless Mode

cdp4j can be run in "headless" mode using with Headless Chrome.

Install Chrome on Debian/Ubuntu

# 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

Install Chrome on RHEL/CentOS/Fedora

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

JavaDoc

cdp4j api

Logging

Simple logger for Java (SLF4J) is supported.

Design Principles

  • 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.

CSS Selector Engine

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.

Usage Examples

Print text content 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);
}

Full page screen capture with cdp4j

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());
}

Print to PDF with cdp4j

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());
        }
    }
}

Samples

- - - -
Attributes.java Bing.java BingTranslator.java CheckBox.java
ExecuteJavascript.java GoogleTranslate.java HelloWorld.java IncognitoBrowsing.java
Logging.java MultiSelect.java NetworkResponse.java Screenshot.java
Select.java SendKeys.java SharedSession.java Sizzle.java
UserAgent.java WaitUntil.java XPathSelector.java CodeCoverage.java
PrintToPDF.java BasicAuthentication.java DownloadFile.java Crawler.java
MultiProcess.java FollowRedirects.java CloseSessionOnRedirect -

Building cdp4j

# 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

Reproducible Builds

The binaries released with each cdp4j version starting at 2.1.0 are reproducible, which means that you can easily reproduce a byte identical version from the source code for that release.

How it is tested

cdp4j is regularly built and tested on circleci and AppVeyor.

Contribute to cdp4j Project

Please follow cdp4j Contributor's Guide.

Getting Help

WebFolder

You can support cdp4j development by buying support package. Please contact us for support packages & pricing.

cdp4j's People

Contributors

agilecreativity avatar inponomarev avatar janisvi avatar nikhil-bidgely avatar paine1690 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.