使用puppeteer 爬取PDD数据时出现要求登陆,之前是没有这问题的。前端
尝试多种方式若是:web
最后查找浏览器判断是否在自动化工具控制下的方法,结果查询到文章,得知了新版Chrome有navigator.webdriver属性。chrome
若是是在自动化工具控制下,在控制台中输出navigator.webdriver,能够看到true。浏览器
若是直接打开浏览器,在控制台出现的则是undefined,注意这里不是navigator.webdriver值为undefined,而是navigator没有webdriver属性。工具
该属性值不能经过赋值进行覆盖,但咱们能够经过Object.defineProperty来覆盖:测试
Object.defineProperty(navigator,'webdriver',{ get: ()=>false })
可是若是是经过in或者hasOwnProperty来判断,google
'webdriver' in navigator //or navigator.hasOwnProperty('webdriver')
覆盖webdriver为false就没用了。暂时不知道如何处理这种状况,还没看到deleteProperty这样的方法,固然delete也是没有用的。spa
翻看PDD前端源码发现还对phantomjs等进行了检测。代理
有兴趣的能够看看Chrome添加该属性的原因:https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/6GysDZCWwB8/rXbGoRohBgAJcode
能够根据ChromeStatus得知该属性添加的版本为63,但这属性须要到在puppeteer v0.12.0(对应chromium版本为64.0.3240.0 (r508693))中才开始有效,在v0.11.0(63.0.3205.0 (r499413))中还未生效。