亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

移除Selenium中window.navigator.webdriver值

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

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

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

我們來(lái)看一個(gè)例子。

使用下面這一段代碼啟動(dòng)Chrome窗口:

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

from selenium.webdriver import Chrome
driver = Chrome()


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

window.navigator.webdriver

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

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

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

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

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

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

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

對(duì)js更精通的朋友,可能會(huì)使用下面這一段代碼來(lái)實(shí)現(xiàn):

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

運(yùn)行效果如下圖所示:

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

如下圖所示。

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

因?yàn)楫?dāng)你執(zhí)行: driver.get(網(wǎng)址)的時(shí)候,瀏覽器會(huì)打開(kāi)網(wǎng)站,加載頁(yè)面并運(yùn)行網(wǎng)站自帶的js代碼。

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

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

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

在啟動(dòng)Chromedriver之前,為Chrome開(kāi)啟實(shí)驗(yàn)性功能參數(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)

此時(shí)啟動(dòng)的Chrome窗口,在右上角會(huì)彈出一個(gè)提示,不用管它,不要點(diǎn)擊 停用按鈕。

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

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

相關(guān)文章

  • 3個(gè) Python 編程技巧

    3個(gè) Python 編程技巧

    這篇文章主要介紹 Python 編程技巧,我們知道,字典的本質(zhì)是哈希表,本身是無(wú)法排序的,但 Python 3.6 之后,字典是可以按照插入的順序進(jìn)行遍歷的,這就是有序字典,其中的原理,可以閱讀為什么 Python3.6 之后字典是有序的。本文也會(huì)介紹該內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • Django給表單添加honeypot驗(yàn)證增加安全性

    Django給表單添加honeypot驗(yàn)證增加安全性

    這篇文章主要介紹了Django給表單添加honeypot驗(yàn)證增加安全性的方法,幫助大家更好的理解和學(xué)習(xí)使用Django框架,感興趣的朋友可以了解下
    2021-05-05
  • python用pyecharts實(shí)現(xiàn)地圖數(shù)據(jù)可視化

    python用pyecharts實(shí)現(xiàn)地圖數(shù)據(jù)可視化

    這篇文章主要介紹了python用pyecharts實(shí)現(xiàn)地圖數(shù)據(jù)可視化,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Appium+python自動(dòng)化之連接模擬器并啟動(dòng)淘寶APP(超詳解)

    Appium+python自動(dòng)化之連接模擬器并啟動(dòng)淘寶APP(超詳解)

    這篇文章主要介紹了Appium+python自動(dòng)化之 連接模擬器并啟動(dòng)淘寶APP(超詳解)本文以淘寶app為例,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-06-06
  • Python?if?else條件語(yǔ)句形式詳解

    Python?if?else條件語(yǔ)句形式詳解

    這篇文章主要介紹了Python?if?else條件語(yǔ)句形式詳解,在?Python?中,可以使用?if?else?語(yǔ)句對(duì)條件進(jìn)行判斷,然后根據(jù)不同的結(jié)果執(zhí)行不同的代碼,這稱為選擇結(jié)構(gòu)或者分支結(jié)構(gòu),接下來(lái)小編就根據(jù)情況的不同介紹if?else條件語(yǔ)句形式的不同,需要的朋友可以參考一下
    2022-03-03
  • Django基于ORM操作數(shù)據(jù)庫(kù)的方法詳解

    Django基于ORM操作數(shù)據(jù)庫(kù)的方法詳解

    這篇文章主要介紹了Django基于ORM操作數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式總結(jié)分析了Django使用ORM操作數(shù)據(jù)庫(kù)的相關(guān)配置、增刪改查等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 淺談Python xlwings 讀取Excel文件的正確姿勢(shì)

    淺談Python xlwings 讀取Excel文件的正確姿勢(shì)

    這篇文章主要介紹了淺談Python xlwings 讀取Excel文件的正確姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python和shell變量互相傳遞的幾種方法

    python和shell變量互相傳遞的幾種方法

    這篇文章主要介紹了python和shell變量互相傳遞方法,使用了環(huán)境變量、管道等方法
    2013-11-11
  • 代碼詳解django中數(shù)據(jù)庫(kù)設(shè)置

    代碼詳解django中數(shù)據(jù)庫(kù)設(shè)置

    在本篇文章里小編給大家分享了關(guān)于django中數(shù)據(jù)庫(kù)設(shè)置的相關(guān)實(shí)例內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。
    2019-01-01
  • Python實(shí)現(xiàn)股市信息下載的方法

    Python實(shí)現(xiàn)股市信息下載的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)股市信息下載的方法,涉及Python使用urllib模塊進(jìn)行URL及文件的相關(guān)操作技巧,需要的朋友可以參考下
    2015-06-06

最新評(píng)論