puppeteer-pro
Version:
A simple puppeteer wrapper to enable useful plugins with ease
52 lines • 1.91 kB
JavaScript
;
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