Как скрыть FirefoxDriver (используя Selenium) без ошибки функции findElement в PhantomDriver(браузер без головы)?

Я пытаюсь сделать скрытый FirefoxDriver. Согласно моим исследованиям, я должен использовать PhantomJSDriver, но когда я использую драйвер PhantomJSDriver. Оператор FindElement больше не работает.

        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.XPath("//*[@id='lst-ib']")).SendKeys("edd");          
        string s = driver.Url;
        Console.WriteLine(s);

Сообщение об ошибке:

Произошло необработанное исключение типа "OpenQA.Selenium.NoSuchElementException" в WebDriver.dll

Дополнительная информация: {"errorMessage":"Невозможно найти элемент с xpath '// [@id =' _ fZl ']/ span / svg / path'", "request": {"headers": {"Accept": " application / json, image / png "," Connection ":" Close "," Content-Length ":" 57 "," Content-Type ":" application / json; charset = utf-8 "," Host ":" локальный:50454"},"httpVersion":"1.1","метод":"POST","пост":"{\", используя \":\" XPATH \ "\ "значение \": \" // [@id = '_ FZL']/ SPAN / SVG / путь \ "}", "URL": "/ элемент", "urlParsed":{"якоря": "", "запрос": "", "файл": "элемент", "каталог": "/", "путь": "/ элемент", "относительный": "/ элемент", "порт": "", "хозяин": "", "пароль":" ", "пользователь": "", "UserInfo":"","власть": "", "протокол": "", "источник": "/ элемент","queryKey":{},"куски":["элемент"]},"urlOriginal":"/ сеанса /feab13f0-720f-11e7-80b3-452aee308158/ элемент"}}

Есть ли другой способ скрыть FirefoxDriver? Не могли бы вы мне помочь, пожалуйста?

3 ответа

Решение

Я решил это. Прежде всего, мы можем использовать PhantomJS, не показывая его консоль следующим кодом:

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

Второе за ошибку, которую я упомянул. Google возвращает разные HTML-страницы для браузеров, поэтому идентификатор или Xpath в браузере PhantomJS будут отличаться от того, который я экспортировал при открытии Firefox. Когда я использовал

string html=driver.PageSource;

чтобы узнать, какой правильный XPath или Id, функция findElement работает хорошо.

Например: Для результатов сайта Google. Первая ссылка XPath в FirefoxDriver

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

XPath первой ссылки в PhantomJSDriver

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

Начиная с версии 55+ для Linux и 56+ для Windows и OSX, Firefox поддерживает -headlessопция командной строки. Это должно быть использовано так:

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

Соответствующий код в C# будет:

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

Потому что.NET-оболочка не поддерживает.headless собственность

Нет способа скрыть FirefoxDriver как таковой. Вы можете запустить его на виртуальной машине и свернуть окно виртуальной машины, но это не практично для большинства людей.

Давайте посмотрим на вашу реальную проблему. Похоже, что Google присваивает идентификатор окна поиска с помощью js, чтобы предотвратить его удаление, поскольку это противоречит их условиям обслуживания.

У вас есть несколько вариантов здесь:

1) найдите элемент, используя имя 'q', так как он назван так, независимо от phantomjs или firefox.

2) просто перейдите непосредственно на страницу результатов поиска: https://www.google.com.tr/search?q=edd

Другие вопросы по тегам