使用 puppeteer 爬取网页时,触发反爬措施,如何关闭?
目的: 使用 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 } })