Как освободить и выпустить закрытые воспоминания браузеров Chrome в Selenium? - PullRequest
0 голосов
/ 04 января 2019

Я написал многопоточную автоматизацию, которая использует множество браузеров Chrome (может быть несколько раз) с Selenium и C #.

Я пытался использовать все, включая «--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

Какое-либо рабочее решение, как я могу предотвратить перезапуск высокопроизводительного ПК моего клиента для освобождения памяти Chrome или его зависание перед повторным использованием автоматизации? Любая другая альтернатива?

1 Ответ

0 голосов
/ 04 января 2019

Существует команда для удаления всех открытых окон браузеров (chrome.exe) и процесса драйвера chrome, связанного с этим окном браузера (chromedriver.exe)

Чтобы уничтожить процесс драйвера 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);

Для получения дополнительной информации см. это и это
надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...