我创建了一个播放器,它可以使用selenium和C#中的ChromeDriver自动化chrome。它工作正常。
我面临的问题是,当它为ChromDriver创建一个对象时,它将启动ChromeDriver应用程序,该应用程序会弹出,然后Chrome将加载。它非常完美,因为该应用程序正在为我加载chrome。
无论如何,我可以打开隐藏的ChromeDriver吗?
答案 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();
}
}