ChromeDriver控制台应用程序隐藏

时间:2012-07-16 09:32:45

标签: webdriver

我创建了一个播放器,它可以使用selenium和C#中的ChromeDriver自动化chrome。它工作正常。

我面临的问题是,当它为ChromDriver创建一个对象时,它将启动ChromeDriver应用程序,该应用程序会弹出,然后Chrome将加载。它非常完美,因为该应用程序正在为我加载chrome。

无论如何,我可以打开隐藏的ChromeDriver吗?

7 个答案:

答案 0 :(得分:43)

在最新的WebDriver中,不需要在WebDriver \ DriverService.cs中修改源代码。您只需要实例化ChromeDriverService并将HideCommandPromptWindow设置为true,然后通过该服务和ChromeOptions实例化ChromeDriver。我在下面给出了C#代码示例

var chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = true;
return new ChromeDriver(chromeDriverService,  new ChromeOptions());

答案 1 :(得分:11)

不,在没有修改绑定源代码的情况下,无法在.NET绑定中隐藏chromedriver.exe的控制台窗口。这被视为绑定的一项功能,因为它使您很容易看到代码未正确清理ChromeDriver的资源,因为控制台窗口仍处于打开状态。对于某些其他语言,如果您的代码未通过调用WebDriver对象上的quit()方法正确清理ChromeDriver实例,则最终可能会在您的计算机上运行zombie chromedriver.exe进程。

答案 2 :(得分:6)

是的,您需要修改Start()中WebDriver \ DriverService.cs中的源代码;添加:

this.driverServiceProcess.StartInfo.CreateNoWindow = true;

答案 3 :(得分:2)

此问题的更新。是的,您可以在Selenium 2.40.0及更高版本中隐藏命令提示符窗口。请注意,不建议隐藏命令提示符窗口,但您可以这样做。由于问题是针对C#的,因此您需要使用下一个代码:

ChromeDriver

var driverService = ChromeDriverService.CreateDefaultService();
driverService.HideCommandPromptWindow = true;

var driver = new ChromeDriver(driverService, new ChromeOptions());

InternetExplorerDriver

var driverService = InternetExplorerDriverService.CreateDefaultService();
driverService.HideCommandPromptWindow = true;

var driver = new InternetExplorerDriver(driverService, new InternetExplorerOptions());

PhantomJSDriver

var driverService = PhantomJSDriverService.CreateDefaultService();
driverService.HideCommandPromptWindow = true;

var driver = new PhantomJSDriver(driverService);

答案 4 :(得分:1)

现在可以使用无头选项来实现。那时可能不可用。 Running Chrome Headless

翻译成C#,您可以执行以下操作:

ChromeOptions options = new ChromeOptions();
options.AddArgument("headless");
ChromeDriver driver = new ChromeDriver(options);

现在浏览器窗口不可见,而程序的其余部分保持不变。

答案 5 :(得分:0)

menu.php
-css
-js
-admin -> newfile.php

将解决您的问题。

答案 6 :(得分:0)

我使用 c# 做到了这一点,但是像 JimEvan's 回复一样,我在“zombies chromedrivers 和 cmdzombies”方面遇到了一些问题。完成“无头模式”和“隐藏”提示窗口后。

不要忘记关闭您的 chrome 驱动程序实例 correcly

为了解决这个问题,做一点谷歌如何杀死一些进程,我杀死了这两个进程,然后再次打开另一个chrome驱动程序:

static void Main(string[] args)
{
    ChromeDriverService _chromeDriverService;
    ChromeOptions _chromeOptions;
    IWebDriver _driver;

    //set ChromeDriverService, to hide prompt widow
    _chromeDriverService = ChromeDriverService.CreateDefaultService("YOUR CHROME DRIVER PATH HERE");
    _chromeDriverService.HideCommandPromptWindow = true;

    //set ChromeOptions, to hide ChromeDriver 
    _chromeOptions = new ChromeOptions();
    _chromeOptions.AddArguments("headless");

    _driver = ChromeDriver(_chromeDriverService, _chromeOptions);

    //do your things...
}

//call this method before run your chrome driver, to close some ghost chromeDriver or prompt window
private static void CloseGhostsChromeDriver()
{
    Process[] cmd = Process.GetProcessesByName("cmd");
    Process[] chromeDriver = Process.GetProcessesByName("chromedriver");

    Process[] workers = chromeDriver.Concat(cmd).ToArray();

    foreach (Process worker in workers)
    {
        worker.Kill();
        worker.WaitForExit();
        worker.Dispose();
    }
}