A programmable, embedded web browser driver compatible with the Selenium WebDriver spec -- fast, headless, WebKit-based, 100% pure Java, and no browser dependencies
Licensed under the Apache License v2.0 (details).
Sales and support: ops@machinepublishers.com
Get a ZIP archive of the latest release.
Or install via Maven:
<dependency>
<groupId>com.machinepublishers</groupId>
<artifactId>jbrowserdriver</artifactId>
<version>[0.7.2, 2.0)</version>
</dependency>
For other install options, see the Central Repository.
There's no need to install any web browser and this works fine on a server (headless). Java 8 (Oracle JDK/JRE or OpenJDK) is required.
Linux users: on Debian/Ubuntu install the following, apt-get install openjdk-8-jdk openjfx
For specific details, refer to the API documentation.
Use this library like any other Selenium WebDriver or RemoteWebDriver (it implements Selenium's JavascriptExecutor, HasInputDevices, TakesScreenshot, Killable, FindsById, FindsByClassName, FindsByLinkText, FindsByName, FindsByCssSelector, FindsByTagName, and FindsByXPath).
You can optionally create a Settings object, configure it, and pass it to the JBrowserDriver constructor to specify a proxy, request headers, time zone, user agent, or navigator details. By default, the browser mimics the fingerprint of Tor Browser.
Each instance of JBrowserDriver is backed by a separate Java process, so any native browser crashes will not take down your app.
Example:
import org.openqa.selenium.WebDriver;
import com.machinepublishers.jbrowserdriver.Timezone;
import com.machinepublishers.jbrowserdriver.JBrowserDriver;
import com.machinepublishers.jbrowserdriver.Settings;
public class Example {
public static void main(String[] args) {
// You can optionally pass a Settings object here,
// constructed using Settings.Builder
JBrowserDriver driver = new JBrowserDriver(Settings.builder().
timezone(Timezone.AMERICA_NEWYORK).build());
// This will block for the page load and any
// associated AJAX requests
driver.get("http://example.com");
// You can get status code unlike other Selenium drivers.
// It blocks for AJAX requests and page loads after clicks
// and keyboard events.
System.out.println(driver.getStatusCode());
// Returns the page source in its current state, including
// any DOM updates that occurred after page load
System.out.println(driver.getPageSource());
// Close the browser. Allows this thread to terminate.
driver.quit();
}
}
The following Java system properties can be set:
jbd.traceconsole
Mirror trace-level log messages to standard out. Otherwise these logs are only available through the Selenium APIs. Defaults tofalse
.jbd.warnconsole
Mirror warning-level log messages to standard error. Otherwise these logs are only available through the Selenium APIs. Defaults totrue
.jbd.ports
Ports and port ranges available to run browser processes over RMI. Separate values with comma. Defaults to10000-10007
(a max of 8 processes).jbd.testport
Port over which a loopback-only webserver is run when testing is performed. Defaults to9000
.jbd.maxlogs
Maximum number of log entries to store in memory, accessible via the Selenium APIs. Oldest log entry is dropped once max is reached. Regardless of this setting, logs are cleared per instance of JBrowserDriver after a call to quit(), reset(), or Logs.get(String). Defaults to5000
.jbd.browsergui
Show the browser GUI window. Defaults tofalse
.jbd.quickrender
Exclude web page images and binary data from rendering. These resources are still requested and can optionally be saved to disk (see the Settings options). Some versions of Java are inefficient (memory-wise) in rendering images. Defaults totrue
.jbd.blockads
Whether requests to ad/spam servers should be blocked. Based on hosts in ad-hosts.txt in the source tree. Defaults totrue
.jbd.ajaxwait
The idle time (no pending AJAX requests) required in milliseconds before a page is considered to have been loaded completely. For very slow or overloaded CPUs, set a higher value. Defaults to120
.jbd.ajaxresourcetimeout
The time in milliseconds after which an AJAX request will be ignored when considering whether all AJAX requests have completed. Defaults to2000
.jbd.pemfile
Specifies a source of trusted certificate authorities. Can take one of four values: (1)compatible
to accept standard browser certs, (2)trustanything
to accept any SSL cert, (3) a file path, or (4) a URL. The default when this property is not set is your JRE's keystore, so you can use JDK's keytool to import specific certs.jbd.maxrouteconnections
Maximum number of concurrent connections to a specific host+proxy combo. Defaults to8
.jbd.maxconnections
Maximum number of concurrent connections overall. Defaults to3000
.
Example: java -Djbd.browsergui=true -Djbd.quickrender=false -jar myapp.jar
Install and configure Maven v3.x (which is also available in most Linux package repos) and then from the project root run mvn clean compile install
. To use in Eclipse, either import the existing Java project from the root directory or import the pom.xml file via the M2E plugin. However, if you merely want to use this as a dependency in a separate project, see the Download section. Pull requests are welcome, and we ask contributors to agree to the CLA. Feel free to discuss bugs and new features by opening a new issue.
Iframes and alert dialogs are not yet handled. Stay tuned.
Copyright (C) 2014-2016 Machine Publishers, LLC