steam-family-bot-core
Version:
一个用于新版 Steam 家庭的库存监控 Bot 插件
82 lines • 2.69 kB
JavaScript
;
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