日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver

發(fā)布時(shí)間:2023/12/10 windows 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

攝影:產(chǎn)品經(jīng)理產(chǎn)品經(jīng)理的三文魚(yú)炒飯

在《一日一技:如何正確移除Selenium中window.navigator.webdriver的值》一文中,我們介紹了在當(dāng)時(shí)能夠正確從Selenium啟動(dòng)的Chrome瀏覽器中移除window.navigator.webdriver的方法。

后來(lái)時(shí)過(guò)境遷,Chrome升級(jí)了版本,導(dǎo)致當(dāng)時(shí)的方法已經(jīng)失效。如下圖所示:

針對(duì)最新版本的Chrome,我們應(yīng)該如何正確隱藏這個(gè)參數(shù)呢?

在那篇文章里面,我罵了一種掩耳盜鈴的方式:

打開(kāi)網(wǎng)頁(yè),然后通過(guò)執(zhí)行如下 JavaScript 語(yǔ)句來(lái)隱藏window.navigator.webdriver的值:

Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})

我罵了這種方式為掩耳盜鈴,是因?yàn)樗麄兪窃诰W(wǎng)頁(yè)已經(jīng)加載完畢以后才運(yùn)行這段 JavaScript 代碼的,可此時(shí)網(wǎng)站自身的 js 程序早就已經(jīng)通過(guò)讀取window.navigator.webdriver知道你現(xiàn)在使用模擬瀏覽器,你隱藏了又有什么用呢?

所以即使要執(zhí)行這段 JavaScript 語(yǔ)句,也應(yīng)該是在瀏覽器運(yùn)行網(wǎng)站自帶的所有 JavaScript 之前。

這也就是我們現(xiàn)在的方案。

可能有讀者會(huì)認(rèn)為,是不是通過(guò)寫(xiě) Chrome 瀏覽器的插件,讓插件里面的 JavaScript 語(yǔ)句在網(wǎng)站頁(yè)面剛剛打開(kāi),還沒(méi)有運(yùn)行自帶的 JavaScript 之前運(yùn)行。

這種方式雖然可以解決問(wèn)題,但稍顯麻煩,我們今天的方法非常簡(jiǎn)單。就是使用 Google 的Chrome Devtools-Protocol(Chrome 開(kāi)發(fā)工具協(xié)議)簡(jiǎn)稱(chēng)CDP。

我們打開(kāi) CPD 的官方文檔[1],可以看到如下的命令:

?

在每個(gè)Frame 剛剛打開(kāi),還沒(méi)有運(yùn)行 Frame 的腳本前,運(yùn)行給定的腳本。

通過(guò)這個(gè)命令,我們可以給定一段 JavaScript 代碼,讓 Chrome 剛剛打開(kāi)每一個(gè)頁(yè)面,還沒(méi)有運(yùn)行網(wǎng)站自帶的 JavaScript 代碼時(shí),就先執(zhí)行我們給定的這段代碼。

那么如何在 Selenium 中調(diào)用 CDP 的命令呢?實(shí)際上非常簡(jiǎn)單,我們使用driver.execute_cdp_cmd。根據(jù) Selenium 的官方文檔[2],傳入需要調(diào)用的 CDP 命令和參數(shù)即可:

于是我們可以寫(xiě)出如下代碼:

from selenium.webdriver import Chrome

driver = Chrome('./chromedriver')
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
driver.get('http://exercise.kingname.info')

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

完美隱藏window.navigator.webdriver。并且,關(guān)鍵語(yǔ)句:

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})

只需要執(zhí)行一次,之后只要你不關(guān)閉這個(gè)driver開(kāi)啟的窗口,無(wú)論你打開(kāi)多少個(gè)網(wǎng)址,他都會(huì)自動(dòng)提前在網(wǎng)站自帶的所有 js 之前執(zhí)行這個(gè)語(yǔ)句,隱藏window.navigator.webdriver。

如果有人運(yùn)行上面的代碼,出現(xiàn)如下報(bào)錯(cuò):

那么請(qǐng)升級(jí)你的 ChromeDriver。老版本的 Chrome + ChromeDriver 只能用以前的方法,不能用今天的方法。新版本的 Chrome + ChromeDriver 可以使用今天的方法,但不能用老方法。正應(yīng)了那句話(huà):

?

上帝給你關(guān)上一扇門(mén)的時(shí)候,悄悄為你開(kāi)了一扇窗。

雖然使用以上代碼就可以達(dá)到目的了,不過(guò)為了實(shí)現(xiàn)更好的隱藏效果,大家也可以繼續(xù)加入兩個(gè)實(shí)驗(yàn)選項(xiàng):

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path='./chromedriver')
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
driver.get('http://exercise.kingname.info')

公眾號(hào)粉絲突破50000時(shí),解鎖 Pyppeteer 最新隱藏window.nativator.webdriver的方法。

參考資料

[1]

CPD 的官方文檔: https://chromedevtools.github.io/devtools-protocol/tot/Page#method-addScriptToEvaluateOnNewDocument

[2]

官方文檔: https://www.selenium.dev/selenium/docs/api/py/webdriver_chrome/selenium.webdriver.chrome.webdriver.html#selenium.webdriver.chrome.webdriver.WebDriver.execute_cdp_cmd

總結(jié)

以上是生活随笔為你收集整理的chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。