Как скрыть окно консоли chromedriver.exe в C#? - PullRequest
0 голосов
/ 10 января 2020

Я пишу две программы, используя C#, и я использую эти ссылки, установленные через NuGet в обеих:

<package id="Selenium.WebDriver" version="3.141.0" targetFramework="net472" />
<package id="Selenium.WebDriver.ChromeDriver" version="79.0.3945.3600" targetFramework="net472" />

Код одной из программ просто открывает браузер Google Chrome с Профиль по умолчанию и собственное расширение, он перемещается на страницу и выполняет некоторые операции. Другая программа ищет открытый браузер и выполняет операцию. Когда обе программы запускаются, появляется консольное окно (кажется, оно принадлежит chromedriver.exe), а затем открывается браузер. Когда программы заканчиваются, окно консоли остается открытым. Эта вторая программа будет запускаться много раз. Моя проблема в том, что каждый раз, когда программа завершает работу, окно консоли остается открытым.

Можно сказать, что я пробовал кое-что посмотреть, как он себя ведет: если я закрою браузер вручную, окно консоли останется открытым, но если я закрою окно консоли вручную вместо браузера, браузер закроется. Это дает понять, что окно консоли должно быть открыто, чтобы браузер оставался открытым. Я тоже пытался использовать driver.Quit() и driver.Close(). Первый закрывает окно браузера и консоли, второй - только браузер.

Моя идея - запускать первую программу при включении компьютера и запускать вторую программу с другого компьютера столько раз, сколько необходимо. Но я не хочу, чтобы окно консоли оставалось открытым при каждом запуске. Есть ли способ, которым это окно консоли не открывается?

Мой код первой программы следующий:

ChromeOptions options = new ChromeOptions();
    options.AddExtension("[Path]");
    options.AddArgument("--remote-debugging-port= [PortNumber]");
    options.AddArgument("--user-data-dir=[Path]");

IWebDriver driver = new ChromeDriver(options);
    driver.Navigate().GoToUrl("http://www.google.es");

, а вторая программа такова:

ChromeOptions options = new ChromeOptions();
    options.DebuggerAddress = "localhost:[PortNumber]";

IWebDriver driver = new ChromeDriver(options);
    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);

IWebElement element;
    element = driver.FindElement(By.ClassName("[ClassnName]"));
    element.Click();

1 Ответ

1 голос
/ 10 января 2020

Вам нужно изменить исходный код, попробуйте использовать так:

private IWebDriver GetSeleniumDriver()
{
  var chromeDriverService = ChromeDriverService.CreateDefaultService();
  chromeDriverService.HideCommandPromptWindow = true;
  return new ChromeDriver(chromeDriverService, new ChromeOptions());
}

Также, если вы запускаете консольное приложение, попробуйте изменить свойства вашего приложения - тип вывода должен быть «Window Application», а не «Console Application» .

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