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

  • 相关阅读:
    logback-spring.xml配置文件详解
    SpringBoot-Controller接收参数的几种常用方式
    spring boot配置定时任务设置
    SpringCloud 配置文件 application.yml和 bootstrap.yml区别
    ajax/get请求
    ajax封装2
    ajax封装1
    楼层特效
    旋转动画
    联动动画
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14260765.html
Copyright © 2011-2022 走看看