最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

移除Selenium中window.navigator.webdriver值

 更新時間:2022年06月10日 15:45:50   作者:kingname  
這篇文章主要為大家介紹了如何正確的移除Selenium中window.navigator.webdriver的值方法步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

有不少朋友在開發(fā)爬蟲的過程中喜歡使用Selenium + Chromedriver,以為這樣就能做到不被網(wǎng)站的反爬蟲機(jī)制發(fā)現(xiàn)。

先不說淘寶這種基于用戶行為的反爬蟲策略,僅僅是一個普通的小網(wǎng)站,使用一行Javascript代碼,就能輕輕松松識別你是否使用了Selenium + Chromedriver模擬瀏覽器。

我們來看一個例子。

使用下面這一段代碼啟動Chrome窗口:

現(xiàn)在,在這個窗口中打開開發(fā)者工具,并定位到Console選項卡,如下圖所示。

from selenium.webdriver import Chrome
driver = Chrome()


現(xiàn)在,在這個窗口輸入如下的js代碼并按下回車鍵:

window.navigator.webdriver

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

但是,如果你打開一個普通的Chrome窗口,執(zhí)行相同的命令,可以發(fā)現(xiàn)這行代碼的返回值為 undefined,如下圖所示:

所以,如果網(wǎng)站通過js代碼獲取這個參數(shù),返回值為 undefined說明是正常的瀏覽器,返回 true說明用的是Selenium模擬瀏覽器。一抓一個準(zhǔn)。這里給出一個檢測Selenium的js代碼例子:

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

網(wǎng)站只要在頁面加載的時候運行這個js代碼,就可以識別訪問者是不是用的Selenium模擬瀏覽器。如果是,就禁止訪問或者觸發(fā)其他反爬蟲的機(jī)制。

那么對于這種情況,在爬蟲開發(fā)的過程中如何防止這個參數(shù)告訴網(wǎng)站你在模擬瀏覽器呢?

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

對js更精通的朋友,可能會使用下面這一段代碼來實現(xiàn):

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

運行效果如下圖所示:

確實修改成功了。這種寫法就萬無一失了嗎?并不是這樣的,如果此時你在模擬瀏覽器中通過點擊鏈接、輸入網(wǎng)址進(jìn)入另一個頁面,或者開啟新的窗口,你會發(fā)現(xiàn), window.navigator.webdriver又變成了 true。

如下圖所示。

那么是不是可以在每一個頁面都打開以后,再次通過webdriver執(zhí)行上面的js代碼,從而實現(xiàn)在每個頁面都把 window.navigator.webdriver設(shè)置為 undefined呢?也不行。

因為當(dāng)你執(zhí)行: driver.get(網(wǎng)址)的時候,瀏覽器會打開網(wǎng)站,加載頁面并運行網(wǎng)站自帶的js代碼。

所以在你重設(shè) window.navigator.webdriver之前,實際上網(wǎng)站早就已經(jīng)知道你是模擬瀏覽器了。

接下來,又有朋友提出,可以通過編寫Chrome插件來解決這個問題,讓插件里面的js代碼在網(wǎng)站自帶的所有js代碼之前執(zhí)行。

這樣做當(dāng)然可以,不過有更簡單的辦法,只需要設(shè)置Chromedriver的啟動參數(shù)即可解決問題。

在啟動Chromedriver之前,為Chrome開啟實驗性功能參數(shù) 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窗口,在右上角會彈出一個提示,不用管它,不要點擊 停用按鈕。

再次在開發(fā)者工具的Console選項卡中查詢 window.navigator.webdriver,可以發(fā)現(xiàn)這個值已經(jīng)自動變成 undefined了。并且無論你打開新的網(wǎng)頁,開啟新的窗口還是點擊鏈接進(jìn)入其他頁面,都不會讓它變成 true。運行效果如下圖所示。

以上就是移除Selenium中window.navigator.webdriver值的詳細(xì)內(nèi)容,更多關(guān)于window.navigator.webdriver值移除的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python接口自動化淺析unittest單元測試原理

    Python接口自動化淺析unittest單元測試原理

    這篇文章主要介紹了Python接口自動化淺析unittest單元測試原理,文中描述了單元測試,unittest模塊特性、大致流程、源碼及實戰(zhàn)例子這幾個模塊,有需要的朋友可以借鑒參考下
    2021-08-08
  • numpy中三維數(shù)組中加入元素后的位置詳解

    numpy中三維數(shù)組中加入元素后的位置詳解

    今天小編就為大家分享一篇numpy中三維數(shù)組中加入元素后的位置詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python argparse模塊通過后臺傳遞參數(shù)實例

    python argparse模塊通過后臺傳遞參數(shù)實例

    這篇文章主要介紹了python argparse模塊通過后臺傳遞參數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python使用Streamlit快速創(chuàng)建儀表盤

    Python使用Streamlit快速創(chuàng)建儀表盤

    這篇文章主要為大家詳細(xì)介紹了Python如何使用Streamlit快速創(chuàng)建一個簡單的儀表盤,文中的示例代碼簡潔易懂,快跟隨小編一起來學(xué)習(xí)一下吧
    2023-09-09
  • 講清楚fit_transform()和transform()的區(qū)別及說明

    講清楚fit_transform()和transform()的區(qū)別及說明

    這篇文章主要介紹了講清楚fit_transform()和transform()的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python+Turtle實現(xiàn)繪制勾股樹

    Python+Turtle實現(xiàn)繪制勾股樹

    畢達(dá)哥拉斯樹,也叫“勾股樹”,是由畢達(dá)哥拉斯根據(jù)勾股定理所畫出來的一個可以無限重復(fù)的樹形圖形。本文將利用Python中的Turtle庫實現(xiàn)勾股樹的繪制,感興趣的可以了解一下
    2023-01-01
  • python樹的雙親存儲結(jié)構(gòu)的實現(xiàn)示例

    python樹的雙親存儲結(jié)構(gòu)的實現(xiàn)示例

    本文主要介紹了python樹的雙親存儲結(jié)構(gòu),這種存儲結(jié)構(gòu)是一種順序存儲結(jié)構(gòu),采用元素形如“[結(jié)點值,雙親結(jié)點索引]”的列表表示,感興趣的可以了解一下
    2023-11-11
  • 利用Python語言的grpc實現(xiàn)消息傳送詳解

    利用Python語言的grpc實現(xiàn)消息傳送詳解

    gRPC是一個高性能、通用的開源RPC框架,其由Google主要面向移動應(yīng)用開發(fā)并基于HTTP/2協(xié)議標(biāo)準(zhǔn)而設(shè)計。本文主要介紹了如何利用Python語言的grpc實現(xiàn)消息傳送,感興趣的可以了解一下
    2023-03-03
  • python對list中的每個元素進(jìn)行某種操作的方法

    python對list中的每個元素進(jìn)行某種操作的方法

    今天小編就為大家分享一篇python對list中的每個元素進(jìn)行某種操作的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 詳解python ThreadPoolExecutor異常捕獲

    詳解python ThreadPoolExecutor異常捕獲

    本文主要介紹了詳解python ThreadPoolExecutor異常捕獲,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評論

哈尔滨市| 米脂县| 永春县| 仙居县| 建宁县| 射阳县| 曲阜市| 会同县| 锡林浩特市| 洛川县| 康乐县| 九江县| 介休市| 自治县| 海丰县| 繁峙县| 山东省| 高淳县| 松阳县| 澄城县| 德惠市| 松滋市| 上犹县| 平和县| 宝丰县| 万载县| 北票市| 论坛| 肇东市| 磐安县| 新绛县| 建德市| 赞皇县| 正宁县| 岗巴县| 历史| 吉隆县| 邳州市| 仁寿县| 芷江| 镇赉县|