91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何正確移除Selenium中的

發布時間:2021-12-01 17:17:59 來源:億速云 閱讀:158 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關如何正確移除Selenium中的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

下面將介紹了能夠正確從Selenium啟動的Chrome瀏覽器中移除window.navigator.webdriver的方法。

后來時過境遷,Chrome升級了版本,導致當時的方法已經失效。如下圖所示:

如何正確移除Selenium中的  

針對最新版本的Chrome,我們應該如何正確隱藏這個參數呢?

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

打開網頁,然后通過執行如下 JavaScript 語句來隱藏window.navigator.webdriver的值:

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

我罵了這種方式為掩耳盜鈴,是因為他們是在網頁已經加載完畢以后才運行這段 JavaScript 代碼的,可此時網站自身的 js 程序早就已經通過讀取window.navigator.webdriver知道你現在使用模擬瀏覽器,你隱藏了又有什么用呢?

所以即使要執行這段 JavaScript 語句,也應該是在瀏覽器運行網站自帶的所有 JavaScript 之前。

這也就是我們現在的方案。

可能有讀者會認為,是不是通過寫 Chrome 瀏覽器的插件,讓插件里面的 JavaScript 語句在網站頁面剛剛打開,還沒有運行自帶的 JavaScript 之前運行。

這種方式雖然可以解決問題,但稍顯麻煩,我們今天的方法非常簡單。就是使用 Google 的Chrome Devtools-Protocol(Chrome 開發工具協議)簡稱CDP

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

如何正確移除Selenium中的  
?  

在每個Frame 剛剛打開,還沒有運行 Frame 的腳本前,運行給定的腳本。

”  

通過這個命令,我們可以給定一段 JavaScript 代碼,讓 Chrome 剛剛打開每一個頁面,還沒有運行網站自帶的 JavaScript 代碼時,就先執行我們給定的這段代碼。

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

如何正確移除Selenium中的  

于是我們可以寫出如下代碼:

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')
 

運行效果如下圖所示:

如何正確移除Selenium中的  

完美隱藏window.navigator.webdriver。并且,關鍵語句:

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

只需要執行一次,之后只要你不關閉這個driver開啟的窗口,無論你打開多少個網址,他都會自動提前在網站自帶的所有 js 之前執行這個語句,隱藏window.navigator.webdriver

如果有人運行上面的代碼,出現如下報錯:

如何正確移除Selenium中的  

那么請升級你的 ChromeDriver。老版本的 Chrome + ChromeDriver 只能用以前的方法,不能用今天的方法。新版本的 Chrome + ChromeDriver 可以使用今天的方法,但不能用老方法。正應了那句話:

?  

上帝給你關上一扇門的時候,悄悄為你開了一扇窗。

”  

雖然使用以上代碼就可以達到目的了,不過為了實現更好的隱藏效果,大家也可以繼續加入兩個實驗選項:

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')

上述就是小編為大家分享的如何正確移除Selenium中的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连江县| 蕲春县| 秭归县| 鄂伦春自治旗| 进贤县| 灵宝市| 封丘县| 福建省| 长岭县| 社会| 博爱县| 马公市| 巴南区| 大丰市| 昌都县| 扶余县| 息烽县| 吕梁市| 文成县| 乐都县| 灵寿县| 瑞昌市| 莒南县| 章丘市| 同德县| 德江县| 禄丰县| 昌都县| 于田县| 织金县| 宜都市| 涡阳县| 都昌县| 稷山县| 昌宁县| 寿宁县| 平遥县| 荥经县| 东阳市| 桂阳县| 靖远县|