website-builde / lib /crawler.ts
Daviddolor's picture
Single-process Chromium, fixed visual-polish prompt, Docker config for HF Space
ec675f2
Raw
History Blame Contribute Delete
1.08 kB
import { Browser } from "playwright";
import * as path from "path";
import { extractPageData } from "./extract";
import { extractStatistics } from "./statistics";
export async function crawlPage(browser: Browser, url: string) {
const context = await browser.newContext({ viewport: { width: 1440, height: 900 } });
try {
const page = await context.newPage();
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 60000 });
await page.waitForTimeout(2000);
const hostname = new URL(url).hostname.replace(/[^a-z0-9.-]/gi, "");
const screenshotPath = path.join("/tmp", `crawl-${hostname}-${Date.now()}.png`);
await page.screenshot({ path: screenshotPath, fullPage: true });
const data = await extractPageData(page);
const statistics = await extractStatistics(page);
const vp = page.viewportSize();
const viewport = vp ? `${vp.width}x${vp.height}` : "unknown";
return { url, screenshot: screenshotPath, viewport, ...data, statistics };
} finally {
await context.close(); // always runs — success or failure
}
}