当前位置: 首页 > 编程笔记 >

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

封鸿雪
2023-03-14
本文向大家介绍c# 从内存中释放Selenium chromedriver.exe,包括了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 的资料请关注小牛知识库其它相关文章!

 类似资料:
  • 我设置了一个python代码来运行Selenium。在运行结束时,我使用来关闭实例。()我认为它应该从内存中释放(我在Windows 7上)。但是,每次运行之后,内存中都会保留一个实例。我希望有一种方法可以用python编写一些东西来终止进程。显然,不能完成这项工作。多谢了。

  • 我在C#上度过了一段糟糕的时光,在我不再引用它之后,没有为我保存在内存中的大型结构释放内存。 我在下面包含了一些代码,它们显示了与我遇到的问题类似的问题。我想我一定是误解了GC,因为我不确定为什么下面的代码会抛出内存不足异常。 有人知道为什么我包含的代码会丢失内存吗?没有一份名单被保留,可以立即清理。 谢谢, 保罗 复制:全新的4.5控制台应用程序,将代码粘贴到Main中。 异常将在for循环的第

  • > 指向自动分配实例的指针是否可以使该实例即使在实例化的作用域被保留后也不被解除分配? <罢工> 在 我读到的这篇文章说所有指向去分配内存的指针都是无效的。 但这家伙说的是手动解锁还是自动解锁后的行为? 这是一个示例:

  • 问题内容: 在以下示例中,我有一些有关内存使用的相关问题。 如果我在解释器中运行, 我的机器上使用的实际内存最高为80.9mb。那我 实际内存下降,但仅限于。解释器使用基线,因此不向 释放内存有什么好处?是否因为Python正在“提前计划”,以为你可能会再次使用那么多的内存? 它为什么特别释放- 释放的量基于什么? 有没有一种方法可以强制Python释放所有已使用的内存(如果你知道不会再使用那么多

  • 问题内容: 我应该在将分配的字符串传递给之后释放它吗? 我有一些类似的代码: 在将字符串传递给之后释放字符串时,出现错误。如果我删除呼叫,该错误消失。我究竟做错了什么? 我看到矛盾的意见。有人说我应该自己释放它,有人说VM释放它,有人说VM不释放它,而您应该用奇怪的巫术魔术来释放它。我很困惑。 问题答案: 参数to 的存储完全由您负责:如果您分配了,则需要它。因此,您发布的代码段是正确的。您正在其

  • 问题内容: 有没有一种类似于函数的释放Java内存的方法?还是将对象设置为null并依靠GC是唯一的选择? 问题答案: Java使用托管内存,因此分配内存的唯一方法是使用运算符,而释放内存的唯一方法是依靠垃圾回收器。 该内存管理白皮书(PDF)可能有助于解释发生了什么。 你还可以致电建议垃圾收集器立即运行。但是,Java Runtime做出最终决定,而不是你的代码。 根据Java文档, 调用gc方