使用 puppeteer 爬取网页时,触发反爬措施,如何关闭?
发布于 4 年前 作者 xiaohp 5539 次浏览 来自 问答

目的: 使用 puppeteer 爬取网页接口数据。备份用,数据不到一千条。

思路: 使用 puppeteer 模拟手动浏览网页,获取网页 ajax 接口返回信息,保存到数据库。

遇到问题: 爬虫会被网站识别,触发了反扒错误,接口返回 403 报错。查了一些资料,大概率是通过 navigator.webdriver 属性判断是否爬虫,触发了反爬措施。正常浏览时该属性为 undefined,在 puppeteer 中为 true。如何关闭这个属性?

实现代码:

    const browser = await puppeteer.launch({
        headless: false,
        ignoreDefaultArgs: ['--enable-automation'],
    })

有资料说可以通过设置 --enable-automation 可以关闭该选项,但实际使用并无效果。查阅 puppeteer 源码可知这个选项生效了(没有传入 Chromium 启动参数中),但是实际运行还是 true。继续往下挖需要查看 Chromium 源码,该源码比较庞大,待收集资料进一步查询,先在社区下问下有没解决方案。

环境: 系统版本 macOS 10.15.3 node 版本 12.4.1 puppeteer 版本 2.1.1

1 回复

执行一下

Object.defineProperties(navigator,{ webdriver:{ get: () => false } })
回到顶部