如何避免Puppeteer被前端JS檢測

這兩天開始看puppeteer,發現居然也能被前端js檢測出來!?
github的issue區找了找,原來puppeteer啓動的chrome裏面,是有navigator.webdriver屬性的,搞什麼搞麼,老外真是做那啥還要立牌坊Orz
issue裏也看到了解決方案:

await this.page.evaluateOnNewDocument(() => {
         Object.defineProperty(navigator, 'webdriver', {
         get: () => undefined,
    });
 }

但是說實話這個還是有點問題的,因爲用"webdriver" in navigator還是能檢測出來。
想找找到底哪個環節把"webdriver"屬性加上的,但是文本搜索發現puppeteer源碼中並沒有……
後來發現是啓動chrome的默認參數列表中有"--enable-automation"……
找了一下這個命令行參數的說明:

--enable-automation: Inform users that their browser is being controlled by an automated test.

媽蛋純粹是立牌坊用的,其它毛用沒有……
確認了就可以幹掉它了,啓動chrome時加個忽略默認參數即可:

const browser = await puppeteer.launch({ignoreDefaultArgs: ["--enable-automation"]});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章