webforai
Version:
A library that provides a web interface for AI
54 lines (53 loc) • 1.88 kB
JavaScript
// src/loaders/playwright.ts
import { chromium, devices } from "playwright-core";
var SUPER_BYPASS_DEVICE = {
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
viewport: { width: 1920, height: 1080 },
deviceScaleFactor: 1,
hasTouch: false,
isMobile: false,
javaScriptEnabled: true,
locale: "en-US",
timezoneId: "America/New_York"
};
var loadHtml = async (url, options) => {
const { browser, waitUntil, timeout, superBypassMode } = options ?? {};
const _browser = browser ?? await chromium.launch({ headless: true });
const context = await _browser.newContext(superBypassMode ? SUPER_BYPASS_DEVICE : devices["Desktop Chrome"]);
if (superBypassMode) {
await context.addInitScript(() => {
Object.defineProperty(navigator, "webdriver", { get: () => void 0 });
Object.defineProperty(navigator, "languages", { get: () => ["en-US", "en"] });
Object.defineProperty(navigator, "plugins", { get: () => [1, 2, 3, 4, 5] });
});
}
const page = await context.newPage();
if (superBypassMode) {
await page.route("**/*.js", (route) => {
if (route.request().url().includes("captcha-delivery")) {
return route.abort();
}
return route.continue();
});
}
await page.goto(url, { waitUntil: waitUntil ?? "load", timeout });
await page.evaluate(() => {
const elements = document.querySelectorAll("*");
for (const element of elements) {
const rect = element.getBoundingClientRect();
element.setAttribute("data-rwidth", rect.width.toString());
element.setAttribute("data-rheight", rect.height.toString());
}
});
const html = await page.content();
await page.close();
if (browser) {
await context.close();
} else {
await _browser.close();
}
return html;
};
export {
loadHtml
};