UNPKG

puppeteer-extra-plugin-stealth

Version:

Stealth mode: Applies various techniques to make detection of headless puppeteer harder.

57 lines (46 loc) 1.94 kB
const test = require('ava') const { getVanillaFingerPrint, getStealthFingerPrint } = require('../../test/util') const { vanillaPuppeteer, addExtra } = require('../../test/util') const Plugin = require('.') test('vanilla: empty plugins, empty mimetypes', async t => { const { plugins, mimeTypes } = await getVanillaFingerPrint() t.is(plugins.length, 0) t.is(mimeTypes.length, 0) }) test('vanilla: will not have modifications', async t => { const browser = await vanillaPuppeteer.launch({ headless: true }) const page = await browser.newPage() const test1 = await page.evaluate(() => ({ mimeTypes: Object.getOwnPropertyDescriptor(navigator, 'mimeTypes'), // Must be undefined if native plugins: Object.getOwnPropertyDescriptor(navigator, 'plugins') // Must be undefined if native })) t.is(test1.mimeTypes, undefined) t.is(test1.plugins, undefined) const test2 = await page.evaluate( () => Object.getOwnPropertyNames(navigator) // Must be an empty array if native ) t.false(test2.includes('plugins')) }) test('stealth: has plugin, has mimetypes', async t => { const { plugins, mimeTypes } = await getStealthFingerPrint(Plugin) t.is(plugins.length, 3) t.is(mimeTypes.length, 4) }) test('stealth: will not leak modifications', async t => { const puppeteer = addExtra(vanillaPuppeteer).use(Plugin()) const browser = await puppeteer.launch({ headless: true }) const page = await browser.newPage() const test1 = await page.evaluate(() => ({ mimeTypes: Object.getOwnPropertyDescriptor(navigator, 'mimeTypes'), // Must be undefined if native plugins: Object.getOwnPropertyDescriptor(navigator, 'plugins') // Must be undefined if native })) t.is(test1.mimeTypes, undefined) t.is(test1.plugins, undefined) const test2 = await page.evaluate( () => Object.getOwnPropertyNames(navigator) // Must be an empty array if native ) t.false(test2.includes('plugins')) })