c# Selenium爬取數(shù)據(jù)時防止webdriver封爬蟲的方法
背景
大家在使用Selenium + Chromedriver爬取網(wǎng)站信息的時候,以為這樣就能做到不被網(wǎng)站的反爬蟲機制發(fā)現(xiàn)。但是實際上很多參數(shù)和實際瀏覽器還是不一樣的,只要網(wǎng)站進行判斷處理,就能輕輕松松識別你是否使用了Selenium + Chromedriver模擬瀏覽器。其中
window.navigator.webdriver
就是很重要的一個。
問題窺探
正常瀏覽器打開是這樣的
模擬器打開是這樣的
ChromeOptions options = null; IWebDriver driver = null; try { options = new ChromeOptions(); options.AddArguments("--ignore-certificate-errors"); options.AddArguments("--ignore-ssl-errors"); // options.AddExcludedArgument("enable-automation"); // options.AddAdditionalCapability("useAutomationExtension", false); var listCookie = CookieHelp.GetCookie(); if (listCookie != null) { // options.AddArgument("headless"); } // string ss = @"{ ""source"": ""Object.defineProperty(navigator, 'webdriver', { get: () => undefined})""}"; // options.AddUserProfilePreference("Page.addScriptToEvaluateOnNewDocument", new ssss() { source = " Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) " }); ChromeDriverService service = ChromeDriverService.CreateDefaultService(System.Environment.CurrentDirectory); service.HideCommandPromptWindow = true; driver = new ChromeDriver(service, options, TimeSpan.FromSeconds(120)); ////session.Page.AddScriptToEvaluateOnNewDocument(new OpenQA.Selenium.DevTools.Page.AddScriptToEvaluateOnNewDocumentCommandSettings() ////{ //// Source = @"Object.defineProperty(navigator, 'webdriver', { get: () => undefined })" ////} //// );
所以,如果網(wǎng)站通過js代碼獲取這個參數(shù),返回值為undefined說明是正常的瀏覽器,返回true說明用的是Selenium模擬瀏覽器。
解決辦法
那么對于這種情況,在爬蟲開發(fā)的過程中如何防止這個參數(shù)告訴網(wǎng)站你在模擬瀏覽器呢?執(zhí)行對應(yīng)的js,改掉它的值。
IJavaScriptExecutor js = (IJavaScriptExecutor)driver; string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");
運行效果
完美,達到預(yù)期效果。
以上就是c# Selenium爬取數(shù)據(jù)時防止webdriver封爬蟲的方法的詳細內(nèi)容,更多關(guān)于c# 防止webdriver封爬蟲的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Unity3D實戰(zhàn)之答題系統(tǒng)的實現(xiàn)
本文將用Unity3D制作一個答題系統(tǒng),可以從文本文檔中提取題目和分數(shù),然后綁定到UI上,在答題的過程中,自動判斷分數(shù),自動判斷正確率。感興趣的可以學(xué)習(xí)一下2022-03-03WinForm判斷關(guān)閉事件來源于用戶點擊右上角“關(guān)閉”按鈕的方法
這篇文章主要介紹了WinForm判斷關(guān)閉事件來源于用戶點擊右上角“關(guān)閉”按鈕的方法,涉及C#針對WinForm事件的判定技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09c#用Treeview實現(xiàn)FolderBrowerDialog 和動態(tài)獲取系統(tǒng)圖標(biāo)(運用了Win32 
其實,FolderBrowerDialog 很好用呢,有木有啊親,反正我特別的喜歡,微軟大哥把這個瀏覽文件夾的東東封裝的多好呀2013-03-03學(xué)習(xí)C#靜態(tài)函數(shù)及變量的一個精典例子與代碼
學(xué)習(xí)C#靜態(tài)函數(shù)及變量的一個精典例子與代碼...2007-03-03