c# Selenium爬取数据时防止webdriver封爬虫的方法

 更新时间:2021年01月14日 15:11:38   作者:UP技术控  
这篇文章主要介绍了c# Selenium爬取数据时防止webdriver封爬虫的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下

背景

大家在使用Selenium + Chromedriver爬取网站信息的时候,以为这样就能做到不被网站的反爬虫机制发现。但是实际上很多参数和实际浏览器还是不一样的,只要网站进行判断处理,就能轻轻松松识别你是否使用了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 })"
        ////}
        //// );

所以,如果网站通过js代码获取这个参数,返回值为undefined说明是正常的浏览器,返回true说明用的是Selenium模拟浏览器。

解决办法

那么对于这种情况,在爬虫开发的过程中如何防止这个参数告诉网站你在模拟浏览器呢?执行对应的js,改掉它的值。

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

运行效果

 完美,达到预期效果。

以上就是c# Selenium爬取数据时防止webdriver封爬虫的方法的详细内容,更多关于c# 防止webdriver封爬虫的资料请关注脚本之家其它相关文章!

相关文章

  • C#不提升自己程序的权限实现操作注册表

    C#不提升自己程序的权限实现操作注册表

    这篇文章主要介绍了C#不提升自己程序的权限实现操作注册表的相关资料,需要的朋友可以参考下
    2022-12-12
  • C# yield关键字详解

    C# yield关键字详解

    这篇文章主要介绍了C# yield关键字详解,本文讲解了yield是一个语法糖、语法糖的实现(实现IEnumerable<T>接口的类)、yield使用中的特殊情况等内容,需要的朋友可以参考下
    2015-04-04
  • C# lambda表达式原理定义及实例详解

    C# lambda表达式原理定义及实例详解

    这篇文章主要介绍了C# lambda表达式原理定义及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • C#实现创建标签PDF文件的示例代码

    C#实现创建标签PDF文件的示例代码

    标签PDF文件包含描述文档结构和各种文档元素顺序的元数据,是一种包含后端提供的可访问标记,管理阅读顺序和文档内容表示的逻辑结构的PDF文件。本文将用C#实现创建标签PDF文件,需要的可以参考一下
    2022-08-08
  • C#使用System.Net邮件发送功能踩过的坑

    C#使用System.Net邮件发送功能踩过的坑

    这篇文章主要介绍了C#使用System.Net邮件发送功能踩过的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • C#实现简单的二叉查找树

    C#实现简单的二叉查找树

    这篇文章介绍了C#实现二叉查找树的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 调整C#中数组大小的方法

    调整C#中数组大小的方法

    数组存储多个相同类型的一种非常常用的数据结构,它长度是固定,也就是数组一旦创建大小就固定了,C# 数组不支持动态长度,那在C#中是否有方法可以调整数组大小呢?本文将通过示例介绍一种调整一维数组大小的方法,需要的朋友可以参考下
    2024-06-06
  • 详解如何利用C#实现汉字转拼音功能

    详解如何利用C#实现汉字转拼音功能

    这篇文章主要为大家详细介绍了如何利用C#实现汉字转拼音的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • 浅析泛型类接口定义

    浅析泛型类接口定义

    在使用泛型定义类的过程中遇到了不少问题,特记录如下,需要的朋友可以参考下
    2013-07-07
  • C#随机生成Unicode类型字符串

    C#随机生成Unicode类型字符串

    做测试时经常需要生成一些随机数据,最常见的就是生成随机字符串。而且往往要生成Unicode字符串,有时还要特别指定生成的字符的语言范围。下面是我觉得比较灵活的方法:
    2013-04-04

最新评论