/*
* https://webfolder.io/license.html
*/
package io.webfolder.cdp.sample;
import static io.webfolder.cdp.event.Events.NetworkRequestWillBeSent;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.ObjectReader;
import io.webfolder.cdp.Example;
import io.webfolder.cdp.JsonLibrary;
import io.webfolder.cdp.Launcher;
import io.webfolder.cdp.Options;
import io.webfolder.cdp.event.Events;
import io.webfolder.cdp.serialization.DefaultEventParser;
import io.webfolder.cdp.session.Session;
import io.webfolder.cdp.session.SessionFactory;
@Example
public class CustomEventParser {
private static class RequestInfo {
public String requestId, url;
@Override
public String toString() {
return "RequestInfo [requestId=" + requestId + ", url=" + url + "]";
}
}
public static void main(String[] args) {
Launcher launcher = new Launcher(
Options.builder()
.jsonLibrary(JsonLibrary.Jackson)
.build()
);
try (SessionFactory factory = launcher.launch();
Session session = factory.create()) {
session.getCommand().getNetwork().enable();
// this custom event parser skip unused/unwanted fields
// this usage help to decrease memory and CPU usage
session.setEventParser(new DefaultEventParser() {
@Override
@SuppressWarnings("unused")
public Object parse(Events event,
Session session,
JsonParser parser,
ObjectReader reader)
throws IOException {
switch (event) {
case NetworkRequestWillBeSent:
RequestInfo nws = new RequestInfo();
JsonToken token = null;
while ( (token = parser.nextToken()) != null ) {
String name = parser.currentName();
if ("requestId".equals(name)) {
nws.requestId = parser.getValueAsString();
} else if ("url".equals(name)) {
nws.url = parser.getValueAsString();
}
}
return nws;
default:
return super.parse(event, session, parser, reader);
}
}
});
session.addEventListener((event, value) -> {
if (event == NetworkRequestWillBeSent) {
RequestInfo ri = (RequestInfo) value;
System.out.println(ri);
}
});
session.navigate("https://yahoo.com");
session.waitDocumentReady();
} finally {
launcher.kill();
}
}
}