代码之家  ›  专栏  ›  技术社区  ›  5ervant - techintel.github.io

如何在selenium中释放关闭的chrome浏览器内存?

  •  0
  • 5ervant - techintel.github.io  · 技术社区  · 6 年前

    我写了一个多线程自动化程序,它使用了很多chrome浏览器 (可以重复) 含硒和碳。

    我试着使用所有的东西,包括--incognito,“--disable application cache”,在打开另一个浏览器之前等待一秒钟, driver.Close() , .Quit() .Dispose() . 下面是代码示例:

    IWebDriver[] drivers = new IWebDriver[AUTOMATION_NUM];
    int QUEUE_BROWSERS_TO_OPEN = 0;
    
    Thread mainThread = new Thread(() =>
    {
        for (int i = 0; i < AUTOMATION_NUM && !EXIT; i++)
        {
            ...
            Thread driverThread = new Thread(() => {
                ...
                ChromeOptions chromeOptions = new ChromeOptions();
                chromeOptions.AddArguments("--incognito", "--disable-application-cache"); // headless or non-headless
    
                IWebDriver driver = drivers[instance];
                driver = new ChromeDriver(chromeService, chromeOptions, TIMEOUT_FROM);
                ...
                ++QUEUE_BROWSERS_TO_OPEN;
                ...
                driver.Close();
                driver.Quit();
                driver.Dispose();
            });
    
            _machineThreads.Add(driverThread);
            driverThread.IsBackground = true;
            driverThread.Start();
    
            while (i < AUTOMATION_NUM && !EXIT)
            {
                Thread.Sleep(5000);
    
                if (QUEUE_BROWSERS_TO_OPEN > 0 && BROWSERS_OPEN < BROWSER_NUM)
                    --QUEUE_BROWSERS_TO_OPEN;
            }
        }
    
        Thread endThread = new Thread(() =>
        {
            foreach (Thread machineThread in _machineThreads)
                machineThread.Join();
    
            ...
        });
        endThread.Start();
    });
    mainThread.Start();
    

    并建议我的客户通过单击按钮执行以下代码来终止所有“chromedriver.exe”进程:

    Process[] chromeDriverProcesses = Process.GetProcessesByName("chromedriver");
    
    foreach (var chromeDriverProcess in chromeDriverProcesses)
        chromeDriverProcess.Kill();
    

    但我的客户仍然在说,关闭和完成的自动浏览器的内存仍然存在?

    Closed Chrome browsers' memories

    任何可行的解决方案如何防止我的客户端的高端PC重新启动以释放Chrome内存或在再次使用自动化之前被冻结?还有别的选择吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dev    6 年前

    有命令可以终止所有打开的浏览器窗口(chrome.exe)和与该浏览器窗口(chrome driver.exe)关联的chrome驱动程序进程。

    终止chrome驱动程序进程

    string strCmdText;
    strCmdText= "TASKKILL /f  /IM  CHROMEDRIVER.EXE";
    System.Diagnostics.Process.Start("CMD.exe",strCmdText);
    

    关闭Chrome浏览器窗口

    string strCmdText;
    strCmdText= "TASKKILL /f  /IM  CHROME.EXE";
    System.Diagnostics.Process.Start("CMD.exe",strCmdText);
    

    有关详细信息,请参阅 this this
    希望这有帮助…