puppeteer-extra-plugin-stealth
Version:
Stealth mode: Applies various techniques to make detection of headless puppeteer harder.
64 lines (55 loc) • 2.02 kB
JavaScript
const test = require('ava')
const { vanillaPuppeteer, addExtra } = require('../../test/util')
const Plugin = require('.')
/* global chrome */
test('stealth: will add functional chrome.loadTimes function mock', async t => {
const puppeteer = addExtra(vanillaPuppeteer).use(Plugin({}))
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
const results = await page.evaluate(() => {
const loadTimes = window.chrome.loadTimes()
return {
loadTimes: {
exists: window.chrome && 'loadTimes' in window.chrome,
toString: chrome.loadTimes.toString()
},
dataOK: {
connectionInfo: 'connectionInfo' in loadTimes,
npnNegotiatedProtocol: 'npnNegotiatedProtocol' in loadTimes,
navigationType: 'navigationType' in loadTimes,
wasAlternateProtocolAvailable:
'wasAlternateProtocolAvailable' in loadTimes,
wasFetchedViaSpdy: 'wasFetchedViaSpdy' in loadTimes,
wasNpnNegotiated: 'wasNpnNegotiated' in loadTimes,
firstPaintAfterLoadTime: 'firstPaintAfterLoadTime' in loadTimes,
requestTime: 'requestTime' in loadTimes,
startLoadTime: 'startLoadTime' in loadTimes,
commitLoadTime: 'commitLoadTime' in loadTimes,
finishDocumentLoadTime: 'finishDocumentLoadTime' in loadTimes,
finishLoadTime: 'finishLoadTime' in loadTimes,
firstPaintTime: 'firstPaintTime' in loadTimes
}
}
})
t.deepEqual(results, {
loadTimes: {
exists: true,
toString: 'function () { [native code] }'
},
dataOK: {
commitLoadTime: true,
connectionInfo: true,
finishDocumentLoadTime: true,
finishLoadTime: true,
firstPaintAfterLoadTime: true,
firstPaintTime: true,
navigationType: true,
npnNegotiatedProtocol: true,
requestTime: true,
startLoadTime: true,
wasAlternateProtocolAvailable: true,
wasFetchedViaSpdy: true,
wasNpnNegotiated: true
}
})
})