Я написал многопоточную автоматизацию, которая использует множество браузеров 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();
Но мой клиент все еще говорит, что память закрытых и законченных автоматических браузеров все еще там?
Какое-либо рабочее решение, как я могу предотвратить перезапуск высокопроизводительного ПК моего клиента для освобождения памяти Chrome или его зависание перед повторным использованием автоматизации? Любая другая альтернатива?