最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# Selenium爬取數(shù)據(jù)時(shí)防止webdriver封爬蟲(chóng)的方法

 更新時(shí)間:2021年01月14日 15:11:38   作者:UP技術(shù)控  
這篇文章主要介紹了c# Selenium爬取數(shù)據(jù)時(shí)防止webdriver封爬蟲(chóng)的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

背景

大家在使用Selenium + Chromedriver爬取網(wǎng)站信息的時(shí)候,以為這樣就能做到不被網(wǎng)站的反爬蟲(chóng)機(jī)制發(fā)現(xiàn)。但是實(shí)際上很多參數(shù)和實(shí)際瀏覽器還是不一樣的,只要網(wǎng)站進(jìn)行判斷處理,就能輕輕松松識(shí)別你是否使用了Selenium + Chromedriver模擬瀏覽器。其中

window.navigator.webdriver

就是很重要的一個(gè)。

問(wèn)題窺探

正常瀏覽器打開(kāi)是這樣的

 模擬器打開(kāi)是這樣的 

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)站通過(guò)js代碼獲取這個(gè)參數(shù),返回值為undefined說(shuō)明是正常的瀏覽器,返回true說(shuō)明用的是Selenium模擬瀏覽器。

解決辦法

那么對(duì)于這種情況,在爬蟲(chóng)開(kāi)發(fā)的過(guò)程中如何防止這個(gè)參數(shù)告訴網(wǎng)站你在模擬瀏覽器呢?執(zhí)行對(duì)應(yīng)的js,改掉它的值。

 IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
 string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");

運(yùn)行效果

 完美,達(dá)到預(yù)期效果。

以上就是c# Selenium爬取數(shù)據(jù)時(shí)防止webdriver封爬蟲(chóng)的方法的詳細(xì)內(nèi)容,更多關(guān)于c# 防止webdriver封爬蟲(chóng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#不提升自己程序的權(quán)限實(shí)現(xiàn)操作注冊(cè)表

    C#不提升自己程序的權(quán)限實(shí)現(xiàn)操作注冊(cè)表

    這篇文章主要介紹了C#不提升自己程序的權(quán)限實(shí)現(xiàn)操作注冊(cè)表的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • C# yield關(guān)鍵字詳解

    C# yield關(guān)鍵字詳解

    這篇文章主要介紹了C# yield關(guān)鍵字詳解,本文講解了yield是一個(gè)語(yǔ)法糖、語(yǔ)法糖的實(shí)現(xiàn)(實(shí)現(xiàn)IEnumerable<T>接口的類)、yield使用中的特殊情況等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C# lambda表達(dá)式原理定義及實(shí)例詳解

    C# lambda表達(dá)式原理定義及實(shí)例詳解

    這篇文章主要介紹了C# lambda表達(dá)式原理定義及實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • C#實(shí)現(xiàn)創(chuàng)建標(biāo)簽PDF文件的示例代碼

    C#實(shí)現(xiàn)創(chuàng)建標(biāo)簽PDF文件的示例代碼

    標(biāo)簽PDF文件包含描述文檔結(jié)構(gòu)和各種文檔元素順序的元數(shù)據(jù),是一種包含后端提供的可訪問(wèn)標(biāo)記,管理閱讀順序和文檔內(nèi)容表示的邏輯結(jié)構(gòu)的PDF文件。本文將用C#實(shí)現(xiàn)創(chuàng)建標(biāo)簽PDF文件,需要的可以參考一下
    2022-08-08
  • C#使用System.Net郵件發(fā)送功能踩過(guò)的坑

    C#使用System.Net郵件發(fā)送功能踩過(guò)的坑

    這篇文章主要介紹了C#使用System.Net郵件發(fā)送功能踩過(guò)的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C#實(shí)現(xiàn)簡(jiǎn)單的二叉查找樹(shù)

    C#實(shí)現(xiàn)簡(jiǎn)單的二叉查找樹(shù)

    這篇文章介紹了C#實(shí)現(xiàn)二叉查找樹(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 調(diào)整C#中數(shù)組大小的方法

    調(diào)整C#中數(shù)組大小的方法

    數(shù)組存儲(chǔ)多個(gè)相同類型的一種非常常用的數(shù)據(jù)結(jié)構(gòu),它長(zhǎng)度是固定,也就是數(shù)組一旦創(chuàng)建大小就固定了,C# 數(shù)組不支持動(dòng)態(tài)長(zhǎng)度,那在C#中是否有方法可以調(diào)整數(shù)組大小呢?本文將通過(guò)示例介紹一種調(diào)整一維數(shù)組大小的方法,需要的朋友可以參考下
    2024-06-06
  • 詳解如何利用C#實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能

    詳解如何利用C#實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)漢字轉(zhuǎn)拼音的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • 淺析泛型類接口定義

    淺析泛型類接口定義

    在使用泛型定義類的過(guò)程中遇到了不少問(wèn)題,特記錄如下,需要的朋友可以參考下
    2013-07-07
  • C#隨機(jī)生成Unicode類型字符串

    C#隨機(jī)生成Unicode類型字符串

    做測(cè)試時(shí)經(jīng)常需要生成一些隨機(jī)數(shù)據(jù),最常見(jiàn)的就是生成隨機(jī)字符串。而且往往要生成Unicode字符串,有時(shí)還要特別指定生成的字符的語(yǔ)言范圍。下面是我覺(jué)得比較靈活的方法:
    2013-04-04

最新評(píng)論

逊克县| 吴忠市| 新绛县| 峨边| 丰镇市| 隆林| 玉林市| 封丘县| 台东县| 清河县| 石楼县| 舒兰市| 逊克县| 伊吾县| 青海省| 凌云县| 耒阳市| 武平县| 平江县| 阳山县| 瓦房店市| 西青区| 密云县| 武威市| 钟山县| 嫩江县| 梧州市| 沁源县| 台北县| 扎囊县| 正定县| 宽城| 乐都县| 山东| 祁门县| 五莲县| 孝义市| 两当县| 潼南县| 泌阳县| 巴马|