1

J'essaie de faire FirefoxDriver caché. Selon mes recherches, je dois utiliser PhantomJSDriver mais quand j'utilise PhantomJSDriver driver.FindElement ne fonctionne plus.Comment cacher FirefoxDriver (using Selenium) sans erreur de fonction de findElement dans PhantomDriver (navigateur sans tête)?

 var options = new PhantomJSOptions();  
     options.AddAdditionalCapability("phantomjs.page.settings.userAgent", 
     "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) 
     Chrome/40.0.2214.94 Safari/537.36"); 
     PhantomJSOptions p = new PhantomJSOptions();   
     var service = PhantomJSDriverService.CreateDefaultService(); 
     service.SslProtocol = "any"; 
     service.ProxyType = "http"; 
     service.WebSecurity = false; 
     service.IgnoreSslErrors = true; 
     var driver = new PhantomJSDriver(service, options); 
     driver.Navigate().GoToUrl("https://www.google.com.tr/"); 
     Thread.Sleep(5000); 
     driver.FindElement(By.Id("//*[@id='lst-ib']")).SendKeys("edd");   
     string s = driver.Url; 
     Console.WriteLine(s); 

Message d'erreur:

Une exception non gérée du type 'OpenQA.Selenium.NoSuchElementException' a eu lieu dans WebDriver.dll

Informations complémentaires: { "errorMessage": "Impossible de trouver l'élément avec xpath '// [@id =' _ fZl ']/span/svg/path' "," request ": {" headers ": {" Accepter ":" application/json, image/png "," Connexion ": "Close", "Content-Length": "57", "Content-Type": "application/json; jeu de caractères = utf-8", "Host": "localhost: 50454"}, "httpVersion": "1.1" , "méthode": "POST", "post": "{\" en utilisant \ ": \" xpath \ ", \" value \ ": \" // [@id = '_ fZl']/span/svg/chemin \ "}", "url": "/ élément", "urlParsed": {"ancre": "", "requête": "", "fichier ":" élément "," répertoire ":"/"," chemin ":"/élément "," relatif ":"/élément "," port ":" "," hôte ":" "," mot de passe ": "", "user": "", "userInfo": "", "autorité": "", "protocole": "", "source": "/ element", "queryKey": {}, "morceaux" : ["element"]}, "urlOriginal": "/ session/feab13f0-720f-11e7-80b3-452aee308158/element"}}

Existe-t-il un autre moyen de cacher FirefoxDriver? Pourriez-vous m'aider s'il vous plaît?

Répondre

1

Je l'ai résolu. tout d'abord Nous pouvons utiliser PhantomJS sans montrer sa console par ce code:

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

seconde pour l'erreur que je l'ai mentionné. Google renvoie des pages HTML différentes pour les navigateurs de sorte que le navigateur Id ou Xpath dans PhantomJS sera différent de celui que je l'exporte lorsque j'ouvre Firefox. Quand je

string html=driver.PageSource; 

savoir ce que le XPath correct ou Id, findElement functiom fonctionne bien.

Par exemple: Pour le site Google résultats Le premier de XPath de lien dans FirefoxDriver est

"//*[@id='rso']/div/div/div[1]/div/div/h3/a" 

Le premier XPath de lien dans PhantomJSDriver est

"//*[@id='ires']//ol/div[1]/h3/a" 
0

Il est impossible de masquer FirefoxDriver en tant que tel. Vous pouvez l'exécuter sur une machine virtuelle et minimiser la fenêtre vm mais ce n'est pas pratique pour la plupart des gens.

Jetons un coup d'œil à votre vrai problème. Il semble que Google attribue l'ID du champ de recherche à js pour éviter le raclage, car cela va à l'encontre de leurs conditions d'utilisation.

Vous avez un couple d'options ici:

1) Recherchez l'élément en utilisant le nom « q », car il porte le nom que quel que soit PhantomJS ou FireFox.

2) juste aller directement à la page de résultats de recherche: https://www.google.com.tr/search?q=edd

1

Depuis la version 55+ pour Linux et 56+ pour Windows & OSX, Firefox prend en charge l'option de ligne de commande -headless. It shall be used like this:

o = selenium.webdriver.FirefoxOptions() 
o.set_headless() 
driver=selenium.webdriver.Firefox(options=o) 

Le code correspondant en C# would be:

var o = new FirefoxOptions() 
o.AddArgument('-headless') 
var driver = new FirefoxDriver(o) 

Parce que l'emballage .NET doesn't support the .headless property.