UNPKG

puppeteer-pro

Version:

A simple puppeteer wrapper to enable useful plugins with ease

52 lines 1.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AnonymizeUserAgentPlugin = void 0; // eslint-disable-next-line @typescript-eslint/no-require-imports const UserAgent = require("user-agents"); const __1 = require("../.."); const sleep = (time) => { return new Promise(resolve => { setTimeout(resolve, time); }); }; class AnonymizeUserAgentPlugin extends __1.Plugin { constructor() { super(); this.pages = []; try { this.userAgent = new UserAgent({ vendor: 'Google Inc.', platform: 'Win32' }).toString(); } catch (_ex) { console.warn('Could not create a random user agent'); } } async afterLaunch(browser) { const _newPage = browser.newPage; browser.newPage = async () => { const page = await _newPage.apply(browser); await sleep(100); // Sleep to allow user agent to set return page; }; } async onClose() { this.pages = []; } async onPageCreated(page) { const userAgent = await page.browser().userAgent(); const newUserAgent = this.userAgent || userAgent.replace('HeadlessChrome/', 'Chrome/').replace(/\(([^)]+)\)/, '(Windows NT 10.0; Win64; x64)'); this.pages.push({ target: page, userAgent, newUserAgent }); await page.setUserAgent(newUserAgent); } async beforeRestart() { for (const page of this.pages) { if (page.target.isClosed()) continue; await page.target.setUserAgent(page.newUserAgent); } } async afterStop() { for (const page of this.pages) { if (page.target.isClosed()) continue; await page.target.setUserAgent(page.userAgent); } } } exports.AnonymizeUserAgentPlugin = AnonymizeUserAgentPlugin; //# sourceMappingURL=index.js.map