使用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))中還未生效。