puppeteer 无头模式反反爬设置汇总

流过昼夜 提交于 2021-02-07 16:28:31

点击上方“蓝字”关注我们


启动设置

const browser = await puppeteer.launch({    headless: true,    args: [        '--no-sandbox',        '--disable-setuid-sandbox',        '--disable-blink-features=AutomationControlled',    ],    dumpio: false,});

webdriver

// webdriverawait page.evaluateOnNewDocument(() => {    const newProto = navigator.__proto__;    delete newProto.webdriver; //删除 navigator.webdriver字段    navigator.__proto__ = newProto;});

window.chrome

// 添加 window.chrome字段,向内部填充一些值await page.evaluateOnNewDocument(() => {    window.chrome = {};    window.chrome.app = {        InstallState: 'hehe',        RunningState: 'haha',        getDetails: 'xixi',        getIsInstalled: 'ohno',    };    window.chrome.csi = function () {};    window.chrome.loadTimes = function () {};    window.chrome.runtime = function () {};});

userAgent

// userAgent设置await page.evaluateOnNewDocument(() => {    Object.defineProperty(navigator, 'userAgent', {        //userAgent在无头模式下有headless字样,所以需覆盖        get: () =>        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36',    });});

plugins

// 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',        },        ],    });});

languages

// languages设置await page.evaluateOnNewDocument(() => {    Object.defineProperty(navigator, 'languages', {        //添加语言        get: () => ['zh-CN', 'zh', 'en'],    });});

permissions

// permissions设置await page.evaluateOnNewDocument(() => {    const originalQuery = window.navigator.permissions.query; //notification伪装    window.navigator.permissions.query = (parameters) =>        parameters.name === 'notifications'        ? Promise.resolve({ state: Notification.permission })        : originalQuery(parameters);});

WebGL

// 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);    };});


附导图一张



如何利用puppeteer爬取带反爬的网站


腾讯云TCB云函数趣应用:巧用 puppeteer 五分钟实现一个云加社区个人成就爬虫


使用puppeteer实现产品经理咖啡自动签到


puppeteer抓取开源中国上的推荐软件数据


puppeteer实现百度贴吧自动签到



由于公众号推送规则更改,请多多 分享 点赞 “在看” ,以及时获取极客之路的最新动态。

      点击在看让更多人发现精彩

本文分享自微信公众号 - 极客之路(geek_road)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!