c# 从内存中释放Selenium chromedriver.exe

背景

我设置了一个c#代码来运行Selenium chromedriver.exe.在运行结束时,我有browser.close()来关闭实例。(browser = webdriver.Chrome())我相信它应该从内存中释放chromedriver.exe(我在Windows 7上)。但是每次运行后,内存中仍有一个chromedriver.exe实例。

问题窥探

从理论上讲,调用browser.Quit将关闭所有浏览器选项卡并终止进程。

但是,在我的情况下,我无法做到这一点 - 因为我并行运行多个测试,我不想进行一次测试来关闭其他人的窗口。因此,当我的测试完成运行时,仍有许多“chromedriver.exe”进程在运行。

解决办法

public override void DoJob(IJobExecutionContext context, ILifetimeScope scope, string[] args)
    {
      Console.WriteLine(nameof(LoginReptiles1688Job) + " 开始-------------------");
      ChromeOptions options = null;
      IWebDriver driver = null;
      try
      {
        options = new ChromeOptions();
        options.AddArguments("--ignore-certificate-errors");
        options.AddArguments("--ignore-ssl-errors");
        var listCookie = CookieHelp.GetCookie();
        if (listCookie != null)
        {
          // options.AddArgument("headless");
        }
        ChromeDriverService service = ChromeDriverService.CreateDefaultService(System.Environment.CurrentDirectory);
        service.HideCommandPromptWindow = true;
        driver = new ChromeDriver(service, options, TimeSpan.FromSeconds(120));
        var setLoginStatus = scope.Resolve<ISetLoginStatus>();
        IReptilesImageSearchService _reptilesImageSearchService = scope.Resolve<IReptilesImageSearchService>();
        CrawlingWeb(_reptilesImageSearchService, driver);
        CrawlingWebShop(_reptilesImageSearchService, driver);
      }
      catch (Exception ex)
      {
        throw ex;
      }
      finally
      {
        driver?.Close(); // Close the chrome window
        driver?.Quit(); // Close the console app that was used to kick off the chrome window
        driver?.Dispose(); // Close the chromedriver.exe

        driver = null;
        options = null;
        detailtry = 0;
        shoptry = 0;
        Console.WriteLine(nameof(LoginReptiles1688Job) + " 结束-------------------");
      }
    }

在C#控制台应用程序中使用了chrome驱动程序,只有在将所有三种方法一起调用后才能清理延迟进程。

以上就是c# 从内存中释放Selenium chromedriver.exe的详细内容,更多关于c# 内存中释放Selenium 的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#使用Selenium+PhantomJS抓取数据

    手头项目需要抓取一个用js渲染出来的网站中的数据.使用常用的httpclient抓回来的页面是没有数据.上网百度了一下,大家推荐的方案是使用PhantomJS.PhantomJS是一个没有界面的webkit浏览器,能够和浏览器效果一致的使用js渲染页面.Selenium是一个web测试框架.使用Selenium来操作PhantomJS绝配.但是网上的例子多是Python的.无奈,下载了python按照教程搞了一下,卡在了Selenium的导入问题上.遂放弃,还是用自己惯用的c#吧,就不信c#上没

  • C#使用Selenium的实现代码

    介绍: Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等. 利用它可以驱动浏览器执行特定的动作,如点击.下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码 ,做到可见即可爬. 所以Selenium现在被广泛用于Python爬虫.查了下资料,发现这个工具确实强大,最重要的是,C#也是

  • C# 利用Selenium实现浏览器自动化操作的示例代码

    概述 Selenium是一款免费的分布式的自动化测试工具,支持多种开发语言,无论是C. java.ruby.python.或是C# ,你都可以通过selenium完成自动化测试.本文以一个简单的小例子,简述C# 利用Selenium进行浏览器的模拟操作,仅供学习分享使用,如有不足之处,还请指正. 涉及知识点 要实现本例的功能,除了要掌握Html ,JavaScript,CSS等基础知识,还涉及以下知识点: log4net:主要用于日志的记录和存储,本例采用log4net进行日志记录,便于过程跟踪

  • c# 从内存中释放Selenium chromedriver.exe

    背景 我设置了一个c#代码来运行Selenium chromedriver.exe.在运行结束时,我有browser.close()来关闭实例.(browser = webdriver.Chrome())我相信它应该从内存中释放chromedriver.exe(我在Windows 7上).但是每次运行后,内存中仍有一个chromedriver.exe实例. 问题窥探 从理论上讲,调用browser.Quit将关闭所有浏览器选项卡并终止进程. 但是,在我的情况下,我无法做到这一点 - 因为我并行运

  • 下载与当前Chrome对应的chromedriver.exe(用于python+selenium)

    一. 打开Chrome浏览器,输chrome://version/ 二.下载chromedriver.exe驱动 注意:上图可以看到安装的Chrome浏览器版本为79.0.3945.88 (正式版本) 下载地址1:http://npm.taobao.org/mirrors/chromedriver/ 下载地址2:http://chromedriver.storage.googleapis.com/index.html Firefox浏览器驱动下载地址:https://github.com/moz

  • 解决Keras中循环使用K.ctc_decode内存不释放的问题

    如下一段代码,在多次调用了K.ctc_decode时,会发现程序占用的内存会越来越高,执行速度越来越慢. data = generator(...) model = init_model(...) for i in range(NUM): x, y = next(data) _y = model.predict(x) shape = _y.shape input_length = np.ones(shape[0]) * shape[1] ctc_decode = K.ctc_decode(_y,

  • 全局变量与局部变量在内存中的区别详细解析

    一.预备知识-程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3.全局区(静态区)(static)-,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量

  • python中的selenium安装的步骤(浏览器自动化测试框架)

    一.前言 我们今天要安装的selenium 就是浏览器自动化测试框架,是一个用于Web应用程序的测试工具,就是模拟用户操作.支持的浏览器包括Chrome,IE,Mozilla Firefox,Safari,Opera等.今天我们以Chrome为例讲一下安装方法. (其他方法大同小异) 二.准备工作 2.1.下载浏览器驱动并安装 一般的包安装直接在cmd <pip install 包的名称>,但这个包还需要下载相应的浏览器的驱动,这里强烈推荐Chrome,谁用谁知道.(没有学python爬虫之前

  • python+selenium+chromedriver实现爬虫示例代码

    下载好所需程序 1.Selenium简介 Selenium是一个用于Web应用程序测试的工具,直接运行在浏览器中,就像真正的用户在操作一样. 2.Selenium安装 方法一:在Windows命令行(cmd)输入pip install selenium即可自动安装,安装完成后,输入pip show selenium可查看当前的版本 方法二:直接下载selenium包: selenium下载网址 Pychome安装selenium如果出现无法安装,参考以下博客 解决Pycharm无法使用已经安装S

  • 详解Python+Selenium+ChromeDriver的配置和问题解决

    安装前的准备 1.python的安装和配置 在Window下:在开始菜单中找到运行输入cmd或直接搜索cmd点击进入,输入python,如果出现下图中的>>>则证明Python安装成功. 检测Chrome的版本号安装Chromedriver 记录版本号: 87.0.4280.88 打开ChromeDirver网址:http://chromedriver.storage.googleapis.com/index.html 选择对应版本号的文件夹并打开 ChromeDriver的环境配置 C

  • 使用selenium+chromedriver+xpath爬取动态加载信息

    目录 安装selenium模块 说 明 selenium模块的使用 selenium 模块的常用方法 总 结 使用selenium实现动态渲染页面的爬取,selenium是浏览器自动化测试框架,是一个用于Web应用程序测试的工具,可以直接运行在浏览器当中,并可以驱动浏览器执行指定的动作,如点击.下拉.填充数据.删除cookie等操作,还可以获取浏览器当前页面的源代码,就像用户在浏览器中操作一样.该工具所支持的浏览器有IE浏览器.Mozilla Firefox以及Google Chrome等. 安

  • 用C#+Selenium+ChromeDriver爬取网页(模拟真实的用户浏览行为)

    以下文章来源于公众号:DotNetCore实战 1.背景 Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.而对于爬虫来说,使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀手武器.这里,我将介绍selenium + 谷歌浏览器的一般使用. 2.需求 在平常的爬虫开发中,有时候网页是一堆js堆起来的代码,涉及很多异步计算,如果是普通的http 控制台请求,那么得到的源文件是一堆js ,需要自己在去组装数据,很费力

  • 探讨:程序在内存中的分配(常量,局部变量,全局变量,程序代码)问题

    一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域.- 程序结束释放4.另外还有一个专门放常量的地方.- 程序结束释放 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上.在所有函数体外定义的是

随机推荐