puppeteer-pro
Version:
A simple puppeteer wrapper to enable useful plugins with ease
131 lines • 5.06 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.connect = connect;
exports.launch = launch;
const tslib_1 = require("tslib");
const events = tslib_1.__importStar(require("events"));
// Puppeteer Defaults
const Puppeteer = tslib_1.__importStar(require("puppeteer"));
async function connect(options) {
const browser = await Puppeteer.connect(options || {});
return createBrowser(browser);
}
async function launch(options) {
if (!options)
options = {};
process.env.PUPPETEER_DISABLE_HEADLESS_WARNING = 'true';
const browser = await Puppeteer.launch({ defaultViewport: undefined, ...options });
return createBrowser(browser);
}
async function createBrowser(puppeteerBrowser) {
const browser = puppeteerBrowser;
const _close = browser.close;
browser.close = async () => {
await _close.apply(browser);
browser.browserEvents.emit('close');
};
const _createBrowserContext = browser.createBrowserContext;
browser.createBrowserContext = async (options) => {
const context = await _createBrowserContext.apply(browser, options);
return createBrowserContext(context);
};
const _newPage = browser.newPage;
browser.newPage = async () => {
const page = await _newPage.apply(browser);
return newPage(page);
};
addPluginSupport(browser);
return browser;
}
async function createBrowserContext(puppeteerBrowserContext) {
const browser = puppeteerBrowserContext;
const _close = browser.close;
browser.close = async () => {
await _close.apply(browser);
browser.browserEvents.emit('close');
};
const _newPage = browser.newPage;
browser.newPage = async () => {
const page = await _newPage.apply(browser);
return newPage(page);
};
addPluginSupport(browser);
return browser;
}
function newPage(oldPage) {
const page = oldPage;
page.waitAndClick = async (selector, waitOptions, clickOptions) => {
await page.waitForSelector(selector, waitOptions);
await page.click(selector, clickOptions);
};
page.waitAndType = async (selector, text, waitOptions, typeOptions) => {
await page.waitForSelector(selector, waitOptions);
await page.type(selector, text, typeOptions);
};
page.withLoader = async (fn, loadingSelector, visibleWaitOptions, hiddenWaitOptions) => {
const loadingVisible = page.waitForSelector(loadingSelector, visibleWaitOptions);
const ret = await fn();
await loadingVisible;
await page.waitForSelector(loadingSelector, hiddenWaitOptions || { hidden: true });
return ret;
};
return page;
}
function addPluginSupport(browser) {
browser.plugins = [];
browser.browserEvents = new events.EventEmitter();
browser.interceptions = 0;
browser.addPlugin = async (plugin) => {
browser.plugins.push(plugin);
await plugin.init(browser);
};
browser.clearPlugins = () => {
browser.plugins.forEach(async (plugin) => {
await plugin.stop();
});
browser.plugins = [];
};
browser.anonymizeUserAgent = async () => {
const plugin = new anonymize_user_agent_1.AnonymizeUserAgentPlugin();
await browser.addPlugin(plugin);
return plugin;
};
browser.avoidDetection = async (options) => {
const plugin = new avoid_detection_1.AvoidDetectionPlugin(options);
await browser.addPlugin(plugin);
return plugin;
};
browser.blockResources = async (...resources) => {
const plugin = new block_resources_1.BlockResourcesPlugin(resources);
await browser.addPlugin(plugin);
return plugin;
};
browser.disableDialogs = async (logMessages = false) => {
const plugin = new disable_dialogs_1.DisableDialogsPlugin(logMessages);
await browser.addPlugin(plugin);
return plugin;
};
browser.manageCookies = async (opts) => {
const plugin = new manage_cookies_1.ManageCookiesPlugin(opts);
await browser.addPlugin(plugin);
return plugin;
};
browser.manageLocalStorage = async (opts) => {
const plugin = new manage_localstorage_1.ManageLocalStoragePlugin(opts);
await browser.addPlugin(plugin);
return plugin;
};
browser.solveRecaptchas = async (accessToken) => {
const plugin = new solve_recaptchas_1.SolveRecaptchasPlugin(accessToken);
await browser.addPlugin(plugin);
return plugin;
};
}
const anonymize_user_agent_1 = require("./plugins/anonymize.user.agent");
const avoid_detection_1 = require("./plugins/avoid.detection");
const block_resources_1 = require("./plugins/block.resources");
const disable_dialogs_1 = require("./plugins/disable.dialogs");
const manage_cookies_1 = require("./plugins/manage.cookies");
const manage_localstorage_1 = require("./plugins/manage.localstorage");
const solve_recaptchas_1 = require("./plugins/solve.recaptchas");
//# sourceMappingURL=index.js.map