puppeteer-extra-plugin-stealth
Version:
Stealth mode: Applies various techniques to make detection of headless puppeteer harder.
40 lines (31 loc) • 1.18 kB
JavaScript
const vanillaPuppeteer = require('puppeteer')
const { addExtra } = require('puppeteer-extra')
const fpCollectPath = require.resolve('fpcollect/dist/fpCollect.min.js')
const getFingerPrintFromPage = async page => {
return page.evaluate(() => fpCollect.generateFingerprint()) // eslint-disable-line
}
const dummyHTMLPath = require('path').join(__dirname, './fixtures/dummy.html')
const getFingerPrint = async (puppeteer, pageFn) => {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
await page.goto('file://' + dummyHTMLPath)
await page.addScriptTag({ path: fpCollectPath })
const fingerPrint = await getFingerPrintFromPage(page)
let pageFnResult = null
if (pageFn) {
pageFnResult = await pageFn(page)
}
await browser.close()
return { ...fingerPrint, pageFnResult }
}
const getVanillaFingerPrint = async pageFn =>
getFingerPrint(vanillaPuppeteer, pageFn)
const getStealthFingerPrint = async (Plugin, pageFn) =>
getFingerPrint(addExtra(vanillaPuppeteer).use(Plugin()), pageFn)
module.exports = {
getVanillaFingerPrint,
getStealthFingerPrint,
dummyHTMLPath,
vanillaPuppeteer,
addExtra
}