/*
* https://webfolder.io/license.html
*/
package io.webfolder.cdp.screenshot;
import static java.awt.Desktop.getDesktop;
import static java.awt.Desktop.isDesktopSupported;
import static java.nio.file.Files.createTempFile;
import static java.nio.file.Files.readAllBytes;
import static java.nio.file.Files.write;
import static java.nio.file.Paths.get;
import java.io.IOException;
import java.nio.file.Path;
import io.webfolder.cdp.Example;
import io.webfolder.cdp.Launcher;
import io.webfolder.cdp.command.Page;
import io.webfolder.cdp.session.Session;
import io.webfolder.cdp.session.SessionFactory;
@Example
public class Screenshot {
public static void main(String[] args) throws IOException, InterruptedException {
// an optional javascript utility that helps to force load all images
String imageLoaderJs = new String(readAllBytes(get("src/test/resources/lazy-image-loader.js")));
Launcher launcher = new Launcher();
Path file = createTempFile("screenshot", ".png");
try (SessionFactory factory = launcher.launch();
Session session = factory.create()) {
Page page = session.getCommand().getPage();
// addScriptToEvaluateOnNewDocument() must be called before Session.navigate()
page.addScriptToEvaluateOnNewDocument(imageLoaderJs);
session.navigate("https://www.dw.com/");
session.waitDocumentReady();
// wait until most of images loaded
session.waitUntil(s -> {
Double result = (Double) s.evaluate("window.__cdp4jImageLoaderProgress");
return result.doubleValue() >= 95.00;
}, 5_000);
byte[] data = session.captureScreenshot();
write(file, data);
} finally {
launcher.kill();
}
if (isDesktopSupported()) {
getDesktop().open(file.toFile());
}
}
}