2013-12-20 2 views
9

Ich versuche PhantomJS mit Selenium Webdriver in C# zu verwenden. Im Anschluss ist mein Code:Selenium Webdriver PhantomJS C# öffnet immer ein cmd Fenster

IWebDriver driver = new PhantomJSDriver(); 
driver.Navigate().GoToUrl("http://www.google.com"); 
Console.WriteLine(driver.Url); 
driver.Quit(); 

Der Code funktioniert gut, aber wenn es läuft, öffnet sich ein cmd Fenster, in dem alle das Protokoll der PhantomJS angezeigt wird. Der cmd ist auch mit driver.Quit() geschlossen.

Das Problem ist, dass ich nicht möchte, dass das cmd-Fenster angezeigt wird. Was soll ich tun, um dies zu erreichen?

Update: Wenn ich den gleichen Code in Python, wird das Cmd-Fenster nicht angezeigt. Aber wenn ich das Python-Skript mit py2exe in exe umwandle, wird das cmd-Fenster wieder angezeigt.

+0

ich tun Ich glaube nicht, dass Sie das Befehlsfenster deaktivieren können, tut mir leid. – Brian

+0

Danke Brian und @ user1177636. Eigentlich erstellen wir eine Desktop-Software, die mit vielen Webseiten im Hintergrund interagiert und wir wollen so professionell wie möglich aussehen. Deshalb wollen wir, dass das Befehlsfenster nicht angezeigt wird. –

+0

Bitte aktualisieren Sie Ihre angenommene Antwort. – jpmc26

Antwort

2

Nein, es gibt keine Möglichkeit, das Konsolenfenster der PhantomJS.exe in den .NET-Bindungen auszublenden, ohne den Quellcode der Bindungen zu ändern. Dies wird als ein Merkmal der Bindungen angesehen, da es sehr leicht zu sehen ist, wenn der Code die Ressourcen des PhantomJSDriver nicht korrekt bereinigt hat, da das Konsolenfenster offen bleibt. Wenn Ihr Code die Instanz von PhantomJSDriver nicht ordnungsgemäß aufräumt, indem Sie die Methode quit() für das WebDriver-Objekt aufrufen, können Sie in einigen anderen Sprachen einen Zombie-Prozess PhantomJS.exe auf Ihrem Computer ausführen.

+0

Dank @JimEvans für die detaillierte Antwort. Könnten Sie mir mit den Änderungen helfen, die ich im Quellcode der Bindungen machen konnte? Sind es auch die Selenium Webdriver-Bindungen oder die PhantomJS.exe, die das Konsolenfenster öffnen? –

+3

Tatsächlich wurde die Möglichkeit, dieses Fenster zu verbergen, [gerade hinzugefügt] (http://code.google.com/p/selenium/source/detail?r=bd0e4ef7504cd6a7f184b19b2aa95b56f8958ab5) zu den .NET-Bindungen hinzugefügt. Es sollte verfügbar sein, wenn 2.40 veröffentlicht wird. Und bevor Sie fragen, nein gibt es keinen veröffentlichten Zeitplan für den Zeitpunkt, zu dem eine solche Veröffentlichung stattfinden würde. – JimEvans

+0

Danke @JimEvans. Es wird mir sehr helfen, wenn es veröffentlicht wird. –

34

Wie JimEvans oben erwähnt, wurde diese Funktion in 2.40 hinzugefügt:

https://code.google.com/p/selenium/source/detail?r=bd0e4ef7504cd6a7f184b19b2aa95b56f8958ab5

Ich bin mir nicht ganz sicher, wie man richtig PhantomJSDriverService verwenden, aber die folgenden Werke:

var driverService = PhantomJSDriverService.CreateDefaultService(); 
driverService.HideCommandPromptWindow = true; 
var driver = new PhantomJSDriver(driverService); 
+0

Danke @Martin für die Antwort. Es hilft wirklich. –

+0

Wirklich zu schätzen den Code für die Verwendung! Ich habe mir wirklich den Kopf darüber gekratzt, wie ich die Informationen aus der Quellcode-Revision verwenden kann. – bojingo