UNPKG

webforai

Version:

A library that provides a web interface for AI

54 lines (53 loc) 1.88 kB
// 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 };