Windowless mode
The Equo Chromium browser provides a "Windowless" mode that is essentially a headless browser. The Equo Chromium Windowless mode is very useful for various operations regarding the processing of webpages, since it’s not configured with a GUI. As a result, it is much faster than a normal browser. This supports many use cases, such as:
-
Automated web testing
-
Data extraction or web scrapping
-
Layout checking and performance testing
-
Offscreen rendering
Using the Windowless mode in an SWT application
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import com.equo.chromium.ChromiumBrowser;
public class Windowless {
public static void main(String[] args) throws ClassNotFoundException {
ChromiumBrowser.earlyInit(); // (1)
Display display = Display.getDefault();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
final ChromiumBrowser browser = ChromiumBrowser
.windowless("https://docs.equo.dev/main/getting-started/introduction.html");
Button button = new Button(shell, SWT.PUSH);
button.setText("windowless");
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
browser.executeJavacript("console.log(document.body.innerHTML)");
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
You need to use [1] and property -Dchromium.init_threads=true or one of the methods described in Wayland Support section. |
Using the Windowless mode in a plain Java application
import com.equo.chromium.ChromiumBrowser;
public class Windowless {
public static void main(String[] args) {
ChromiumBrowser browser = ChromiumBrowser
.windowless("https://docs.equo.dev/main/getting-started/introduction.html");
ChromiumBrowser.startBrowsers();
}
}
The Windowless toolkit tries to integrate with the underlying system automatically (Standalone or SWT). The application can run without any display servers on Linux if it only creates Windowless browsers. To force it to integrate with SWT you can use the system property chromium.force_windowless_swt=true. |
Windowless Compatibility Check Method
As of version 124.0.6, the compatibleWithHost
method has been added to the ChromiumBrowser
API, enabling robust system compatibility checks for windowless browsers. This feature can be used to detect browser usage issues on any system.
ChromiumBrowser.compatibleWithHost().check().
This will return a CompletableFuture<String>
, completed with an empty string if the test succeeded or completed exceptionally if the browser could not be created. The compatibility check details for both cases are generated in the ~/.equo/compatibility_<DATE>.log
file.