首頁 > 軟體

移除Selenium中window.navigator.webdriver值

2022-06-10 22:03:10

有不少朋友在開發爬蟲的過程中喜歡使用Selenium + Chromedriver,以為這樣就能做到不被網站的反爬蟲機制發現。

先不說淘寶這種基於使用者行為的反爬蟲策略,僅僅是一個普通的小網站,使用一行Javascript程式碼,就能輕輕鬆鬆識別你是否使用了Selenium + Chromedriver模擬瀏覽器。

我們來看一個例子。

使用下面這一段程式碼啟動Chrome視窗:

現在,在這個視窗中開啟開發者工具,並定位到Console索引標籤,如下圖所示。

from selenium.webdriver import Chrome
driver = Chrome()


現在,在這個視窗輸入如下的js程式碼並按下確認鍵:

window.navigator.webdriver

可以看到,開發者工具返回了 true。如下圖所示。

但是,如果你開啟一個普通的Chrome視窗,執行相同的命令,可以發現這行程式碼的返回值為 undefined,如下圖所示:

所以,如果網站通過js程式碼獲取這個引數,返回值為 undefined說明是正常的瀏覽器,返回 true說明用的是Selenium模擬瀏覽器。一抓一個準。這裡給出一個檢測Selenium的js程式碼例子:

webdriver = window.navigator.webdriver;
if(webdriver){
    console.log('你這個小可愛你以為使用Selenium模擬瀏覽器就可以了?')
} else {
    console.log('正常瀏覽器')
}

網站只要在頁面載入的時候執行這個js程式碼,就可以識別存取者是不是用的Selenium模擬瀏覽器。如果是,就禁止存取或者觸發其他反爬蟲的機制。

那麼對於這種情況,在爬蟲開發的過程中如何防止這個引數告訴網站你在模擬瀏覽器呢?

可能有一些會js的朋友覺得可以通過覆蓋這個引數從而隱藏自己,但實際上這個值是不能被覆蓋的:

對js更精通的朋友,可能會使用下面這一段程式碼來實現:

Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});

執行效果如下圖所示:

確實修改成功了。這種寫法就萬無一失了嗎?並不是這樣的,如果此時你在模擬瀏覽器中通過點選連結、輸入網址進入另一個頁面,或者開啟新的視窗,你會發現, window.navigator.webdriver又變成了 true。

如下圖所示。

那麼是不是可以在每一個頁面都開啟以後,再次通過webdriver執行上面的js程式碼,從而實現在每個頁面都把 window.navigator.webdriver設定為 undefined呢?也不行。

因為當你執行: driver.get(網址)的時候,瀏覽器會開啟網站,載入頁面並執行網站自帶的js程式碼。

所以在你重設 window.navigator.webdriver之前,實際上網站早就已經知道你是模擬瀏覽器了。

接下來,又有朋友提出,可以通過編寫Chrome外掛來解決這個問題,讓外掛裡面的js程式碼在網站自帶的所有js程式碼之前執行。

這樣做當然可以,不過有更簡單的辦法,只需要設定Chromedriver的啟動引數即可解決問題。

在啟動Chromedriver之前,為Chrome開啟實驗性功能引數 excludeSwitches,它的值為 [‘enable-automation’],

完整程式碼如下:

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = Chrome(options=option)

此時啟動的Chrome視窗,在右上角會彈出一個提示,不用管它,不要點選 停用按鈕。

再次在開發者工具的Console索引標籤中查詢 window.navigator.webdriver,可以發現這個值已經自動變成 undefined了。並且無論你開啟新的網頁,開啟新的視窗還是點選連結進入其他頁面,都不會讓它變成 true。執行效果如下圖所示。

以上就是移除Selenium中window.navigator.webdriver值的詳細內容,更多關於window.navigator.webdriver值移除的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com