import WebSocket from "ws";
const reader = new ReaderClient();
const session = await reader.browser();
const ws = new WebSocket(session.wsEndpoint);
await new Promise((resolve) => ws.on("open", resolve));
let cmdId = 0;
function send(method, params = {}, sessionId) {
const id = ++cmdId;
return new Promise((resolve) => {
const handler = (data) => {
const msg = JSON.parse(data.toString());
if (msg.id === id) {
ws.off("message", handler);
resolve(msg.result);
}
};
ws.on("message", handler);
ws.send(JSON.stringify({ id, method, params, ...(sessionId && { sessionId }) }));
});
}
// Create a page and navigate
const target = await send("Target.createTarget", { url: "about:blank" });
const attached = await send("Target.attachToTarget", {
targetId: target.targetId,
flatten: true,
});
await send("Page.enable", {}, attached.sessionId);
await send("Page.navigate", { url: "https://example.com" }, attached.sessionId);
// Wait for load, then get title
const title = await send("Runtime.evaluate", {
expression: "document.title",
}, attached.sessionId);
console.log(title.result.value);
ws.close();
await session.close();
await reader.close();