如何避免Puppeteer被前端JS檢測

996.icu

工具和資料

前言

這兩天開始看puppeteer,發現竟然也能被某數的前端js檢測出來!?
github的issue區找了找,原來puppeteer啓動的chrome裏面,是有navigator.webdriver屬性的,搞什麼搞麼,老外真是作那啥還要立牌坊……javascript

方案1

issue區裏看到的解決方案:前端

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

可是說實話這個仍是有點問題的,由於用"webdriver" in navigator仍是能檢測出來。java

方案2

想找找到底哪一個環節把"webdriver"屬性加上的,可是文本搜索發現puppeteer源碼中並無……
後來chrome中用chrome:version看了下命令行啓動參數,結果發現了這個:"--enable-automation"……
一看就有問題,爲了確認特地搜了一下這個命令行參數的說明:git

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

媽蛋純粹是立牌坊用的,其它毛用沒有……github

確認了就能夠幹掉它了,啓動chrome時加個忽略默認參數便可:web

const browser = await puppeteer.launch({ignoreDefaultArgs: ["--enable-automation"]});
相關文章
相關標籤/搜索