UNPKG

steam-family-bot-core

Version:

一个用于新版 Steam 家庭的库存监控 Bot 插件

82 lines 2.69 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PuppeteerRender = exports.RemotePuppeteerProvider = void 0; const puppeteer_core_1 = __importDefault(require("puppeteer-core")); const index_1 = require("./index"); class RemotePuppeteerProvider { _browser; endpoint; _ok = true; async browser() { if (this._browser?.connected) { return this._browser; } try { this._browser = await puppeteer_core_1.default.connect({ browserWSEndpoint: this.endpoint, }); return this._browser; } catch (e) { this._ok = false; } } constructor(config) { this.endpoint = config.broswerlessWSEndpoint; } get ok() { return this._ok; } } exports.RemotePuppeteerProvider = RemotePuppeteerProvider; class PuppeteerRender { browserHolders; get browser() { const provider = this.browserHolders.find((it) => it.ok); if (provider) { return provider.browser(); } throw Error('NoSuitablePuppeteerProviderFound'); } get ok() { return !!this.browserHolders.find((it) => it.ok); } constructor(providers) { this.browserHolders = providers; } async renderHTML(html, selector, onStart, screenShotOption) { onStart?.(); const browser = await this.browser; const page = await browser.newPage(); await page.setContent(html); const elm = await page.waitForSelector(selector, { timeout: 5000 }); const clip = await elm.boundingBox(); const u8Arr = await elm.screenshot(screenShotOption ? screenShotOption(clip) : { clip: clip, type: 'png', }); await page.close(); return Buffer.from(u8Arr); } async screenshotURL(url, selector, onStart, screenShotOption) { onStart?.(); const browser = await this.browser; const page = await browser.newPage(); await page.goto(url, { timeout: 0, waitUntil: 'domcontentloaded' }); const elm = await page.waitForSelector(selector, { timeout: 10000 }); // wait for potential animation await (0, index_1.sleep)(1000); const buffer = await elm.screenshot({ type: 'png', }); await page.close(); return Buffer.from(buffer); } } exports.PuppeteerRender = PuppeteerRender; //# sourceMappingURL=puppeteer.js.map