检测网址 https://bot.sannysoft.com/
设置webdriver
await page.evaluateOnNewDocument(() => {
const newProto = navigator.__proto__
delete newProto.webdriver
navigator.__proto__ = newProto
})
设置 permissions
await page.evaluateOnNewDocument(() => {
const originalQuery = window.navigator.permissions.query
return (window.navigator.permissions.query = (parameters) =>
parameters.name === 'notifications'
? Promise.resolve({ state: Notification.permission })
: originalQuery(parameters))
})
设置 webGL
await page.evaluateOnNewDocument(() => {
const getParameter = WebGLRenderingContext.getParameter
WebGLRenderingContext.prototype.getParameter = function (parameter) {
// UNMASKED_VENDOR_WEBGL
if (parameter === 37445) {
return 'Intel Inc.'
}
// UNMASKED_RENDERER_WEBGL
if (parameter === 37446) {
return 'Intel(R) Iris(TM) Graphics 6100'
}
return getParameter(parameter)
}
})
设置language
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, 'language', {
get: function () {
return ['zh-CN', 'zh', 'en', 'mt', 'la', 'ko']
},
})
Object.defineProperty(navigator, 'languages', {
get: function () {
return ['zh-CN', 'zh', 'en', 'mt', 'la', 'ko']
},
})
})
设置plugins
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, 'plugins', {
get: () => [
{
0: {
type: 'application/x-google-chrome-pdf',
suffixes: 'pdf',
description: 'Portable Document Format',
enabledPlugin: Plugin,
},
description: 'Portable Document Format',
filename: 'internal-pdf-viewer',
length: 1,
name: 'Chrome PDF Plugin',
},
{
0: {
type: 'application/pdf',
suffixes: 'pdf',
description: '',
enabledPlugin: Plugin,
},
description: '',
filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai',
length: 1,
name: 'Chrome PDF Viewer',
},
{
0: {
type: 'application/x-nacl',
suffixes: '',
description: 'Native Client Executable',
enabledPlugin: Plugin,
},
1: {
type: 'application/x-pnacl',
suffixes: '',
description: 'Portable Native Client Executable',
enabledPlugin: Plugin,
},
description: '',
filename: 'internal-nacl-plugin',
length: 2,
name: 'Native Client',
},
],
})
})