如何讓 Selenium 運行得更隱蔽:防止被網站檢測的實用方法
Selenium是一個功能強大的自動化測試工具,由於可以用來處理JavaScript渲染、Ajax請求以及復雜的用戶交互,所以也被廣泛地應用到爬蟲和數據抓取中。然而,在使用Selenium進行自動化操作或爬蟲時,有時也會遇到被目標網站檢測併阻止的情況。接下來,本文將探討網站是如何檢測Selenium的,併提供幾種常用的解決思路。
網站檢測Selenium的途徑
首先,在給出具體的解決辦法之前,讓我們了解一下常見的檢測角度,以及它們的實現原理。
1. window.navigator.webdriver屬性檢測
window.navigator.webdriver 屬性是由瀏覽器驅動程序(如 Selenium WebDriver)在瀏覽器的全局 window 對象的 navigator 子對象中設置的。它有三個值:
true錶示“當前瀏覽器正在被自動化工具控制”
false錶示“當前瀏覽器沒有被自動化工具控制”
undefined錶示“沒有可用信息錶明瀏覽器是否被自動化工具控制”
當使用 Selenium WebDriver 啟動瀏覽器時,WebDriver 會默認設置這個屬性的值為true,以便網站可以通過 JavaScript 檢測到自動化會話。
在正常的用戶訪問信息裏,這個屬性的值是false或者undefined;但是如果使用Selenium但沒有修改window.navigator.webdriver 屬性,在當前訪問請求裏它的值就是true.
一旦檢測到這是來自自動化工具的訪問請求,網站就可能會執行特定的響應措施,比如顯示驗證碼、限制頁面訪問、記錄日誌或發送警告等。
2.修改 User-Agent 字符串
更改 User-Agent 是避免 Selenium 被檢測的一種有效方法。 默認情況下,Selenium 瀏覽器可能使用標識其為自動化工具的 User-Agent 字符串。您可以通過以下步驟更改 User-Agent,以模擬真實用戶的瀏覽器:
Chrome: 使用 ChromeOptions 設置 User-Agent。
Firefox: 使用 FirefoxProfile 設置 User-Agent。
3. 用戶行為分析
可以明顯看到,自動化腳本與網頁的交互方式通常和人類不同,網站檢測自動化腳本和爬蟲的一大抓手就是分析判斷這些行為是否來自人類,例如:
頁面滾動和停留時間:腳本通常會在頁面上使用最少的時間,固定地勻速滾動頁面,比較機械死闆;而普通的人類用戶在瀏覽的時候會根據興趣的變化在不同的地方停留不同的時間不會用一種固定的模式去翻頁。
鼠標點擊:很多自動的鼠標點擊程序會以一致的時間間隔運行,併出現在精確的同一屏幕位置,與人類的隨機點擊行為截然不同
訪問網站的時間:機器人可能在非高峰時間運行,如深夜或清晨;甚至有些腳本因為程序設置不當,24小時都在工作。
請求間隔:與人類活動的零星模式不同,自動化腳本可能以常規的、可預測的間隔發出請求。特別是當它們使用相同的用戶代理字符串高頻率地發送請求時,不僅容易被網站檢測到,還有可能因為佔用過多網站資源而觸發網站的DDos(Distributed Denial of Service)防禦機制。
4.瀏覽器指紋檢測
瀏覽器指紋是網站收集用戶瀏覽器發出的詳細信息後創建出的瀏覽器的唯一配置文件,包括瀏覽器版本、屏幕分辨率、安裝的字體、安裝的插件等。由於是獨一無二的標識,相當於用戶的在線指紋,所以又叫做瀏覽器指紋。由於自動化腳本通常缺乏個性化的瀏覽器配置,容易與已知的自動化工具或爬蟲的指紋模式相匹配或相似,因此很容易被識別出來。
如果Selenium被檢測出來,如何解決?
1. 使用BrowserScan的機器人檢測功能
首先,在運行腳本或者更新版本前,不妨先使用專門的工具去排查具體存在的問題。BrowserScan就是一個功能全面的強大工具,它擁有專業的機器人檢測功能,主要包含以下四個關鍵的檢測方嚮,涵蓋了網站可以檢測到的大多數參數或漏洞。除了本文提到的所有常見漏洞,還有其他幾十個相關檢測參數,幫助妳便捷地排除問題,及時調整:
WebDriver:檢查妳的瀏覽器是否能被發現由WebDriver控制的跡象
user-agent: 檢查妳的user-agent字符串看起來是否像一個真實的用戶,或者它是否泄露了妳正在使用腳本。
CDP (Chrome DevTools Protocol):BrowserScan可以准確地檢測出使用開發者模擬/控制瀏覽器的情況。
Navigator對象:通過檢查 Navigator 判斷是否存在欺騙行為, 即與典型用戶數據不匹配的異常情況
2. 使用代理 IP
使用代理可以隱藏妳的真實IP 地址,讓妳的自動化腳本更難以被追蹤。如果當前 IP 地址被目標網站封鎖,妳也可以通過切換到不同的 IP 地址來嘗試解決。 接下來的這個示例代碼用於啟動 Chrome 瀏覽器,併將所有 HTTP 和 HTTPS 請求通過指定的代理服務器路由。
PIA S5 Proxy擁有
3.5億+純凈住宅IP,覆蓋200+國家和地區
不限流量和終端,無效IP不計費
支持定位國家、城市、ZIP和ISP,HTTP(S)/SOCKS5
新:流量套餐上線,限時享75%優惠
為什麽妳的 Selenium 很容易被檢測到?
1. 請求頻率和行為的重復率過高
妳的 Selenium 機器人可能被抓住的一個常見原因是過高的請求頻率和重復行為。如果您的腳本發送請求太快或持續訪問同一頁面,它就會引發警覺。還有在網頁上的動作與人類瀏覽網頁的方式不符,比如總是點擊一個按鈕,只抓同一個位置的數據等等。
此外,如果妳的腳本全天候抓取數據,即使是在正常人的休息時間還在不停地訪問網站,那也很容易會被識別為機器人。為了解決這個問題,可以嘗試分散請求來源(也就是使用輪換代理、更改User-Agent等),改變訪問的頁面或順序,併設置腳本在正常時間內用恰當的時間間隔去運行。
2. 僅爬取源代碼
許多網站使用 JavaScript 動態生成內容。如果妳的Selenium爬蟲只爬取初始源代碼併忽略 JavaScript 渲染的內容,它可能就會錯過或與人類用戶的行為不同。這就需要根據目標網頁去更改妳的 Selenium 設置,讓它能夠像一個使用常規瀏覽器的用戶那樣執行併與 JavaScript 交互。
3. 使用單一的瀏覽器和操作繫統配置
使用相同的瀏覽器設置進行所有爬取任務很容易讓妳的程序被發現。很多網站都可以檢測到瀏覽器指紋中的模式,這些模式包括您的瀏覽器版本、操作繫統,甚至是屏幕分辨率等細節。為了避免被檢測,應該在程序運行前先用相關工具進行瀏覽器指紋檢測、機器人檢測等,在修改漏洞後再開始使用自動化腳本。併且在運行程序時可以更換一些用戶代理字符串、瀏覽器配置等信息,模擬不同來源的訪問請求。
4. IP 地址被封鎖
如果排除了以上提到的這些原因,那可能是妳當前使用的 IP 地址進行了過多的會話或發送了太多請求,導致它被網站檢測到併封鎖了。這是網站用來限制抓取活動的一種常見手段;關於這個問題的解決辦法也是使用輪換IP代理、更改訪問請求的身份信息來繞過封禁。