摘要:截至年月日分,本文所講的方法可以用來登錄知乎。如果使用直接登錄知乎,會彈出驗證碼先使用本文的方法再登錄知乎,能夠成功偽裝成真實的瀏覽器,不會彈出驗證碼。實際上,能被識別的特征不止這一個。
有不少朋友在開發爬蟲的過程中喜歡使用Selenium + Chromedriver,以為這樣就能做到不被網站的反爬蟲機制發現。
先不說淘寶這種基于用戶行為的反爬蟲策略,僅僅是一個普通的小網站,使用一行Javascript代碼,就能輕輕松松識別你是否使用了Selenium + Chromedriver模擬瀏覽器。
我們來看一個例子。
使用下面這一段代碼啟動Chrome窗口:
from selenium.webdriver import Chrome driver = Chrome()
現在,在這個窗口中打開開發者工具,并定位到Console選項卡,如下圖所示。
現在,在這個窗口輸入如下的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。運行效果如下圖所示。
截至2019年02月12日20:46分,本文所講的方法可以用來登錄知乎。如果使用 Selenium 直接登錄知乎,會彈出驗證碼;先使用本文的方法再登錄知乎,能夠成功偽裝成真實的瀏覽器,不會彈出驗證碼。
實際上,Selenium + Webdriver能被識別的特征不止這一個。關于如何隱藏其他特征,請關注我的微信公眾號。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101629.html
摘要:截至年月日分,本文所講的方法可以用來登錄知乎。如果使用直接登錄知乎,會彈出驗證碼先使用本文的方法再登錄知乎,能夠成功偽裝成真實的瀏覽器,不會彈出驗證碼。實際上,能被識別的特征不止這一個。 有不少朋友在開發爬蟲的過程中喜歡使用Selenium + Chromedriver,以為這樣就能做到不被網站的反爬蟲機制發現。 先不說淘寶這種基于用戶行為的反爬蟲策略,僅僅是一個普通的小網站,使用一行...
摘要:之前在學校曾經用過的方法做過一些爬蟲腳本來玩,從正式轉前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實踐。爬蟲腳本通常會很頻繁的進行網絡請求,比如要爬取豆瓣排行榜的電影,就會連續發送個網絡請求。 之前在學校曾經用過request+xpath的方法做過一些爬蟲腳本來玩,從ios正式轉前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實踐...
摘要:之前在學校曾經用過的方法做過一些爬蟲腳本來玩,從正式轉前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實踐。爬蟲腳本通常會很頻繁的進行網絡請求,比如要爬取豆瓣排行榜的電影,就會連續發送個網絡請求。 之前在學校曾經用過request+xpath的方法做過一些爬蟲腳本來玩,從ios正式轉前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實踐...
摘要:然而讓蟲師們垂涎的并不是以上的種種,而是其通過驅動瀏覽器獲得的解析的能力。所以說這貨在動態爬取方面簡直是掛逼級別的存在,相較于手動分析更簡單易用,節省分析打碼時間。一旦設置了隱式等待時間,它的作用范圍就是對象實例的整個生命周期。 selenium——自動化測試工具,專門為Web應用程序編寫的一個驗收測試工具,測試其兼容性,功能什么的。然而讓蟲師們垂涎的并不是以上的種種,而是其通過驅動瀏...
摘要:前言最近接了一個爬蟲的私活,收益頗豐。項目需求一個類似百度文庫的網站,要求給出獲得文章,以形式保存下來。但是這次需要保存到這不難,難在要求格式不變。文章都是以許多標簽組合在一起的。知情人請告知,感激不盡。 前言 最近接了一個爬蟲的私活,收益頗豐。自認為對爬蟲掌握的還算不錯,爬過很多國內外網站,數據超過百萬,應對過封IP、設驗證碼、假數據、強制登錄等反爬蟲手段。于是乎,我毫不猶豫的接下了...
閱讀 1207·2021-09-03 10:44
閱讀 603·2019-08-30 13:13
閱讀 2796·2019-08-30 13:11
閱讀 1967·2019-08-30 12:59
閱讀 1034·2019-08-29 15:32
閱讀 1595·2019-08-29 15:25
閱讀 987·2019-08-29 12:24
閱讀 1277·2019-08-27 10:58