欢迎光临
我的个人博客网站

从内存中释放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驱动程序,只有在将所有三种方法一起调用后才能清理延迟进程。

赞(0) 打赏
未经允许不得转载:张拓的天空 » 从内存中释放Selenium chromedriver.exe
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏