Как скрыть 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.Id("//*[@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 ":" localhost: 50454 "}," httpVersion ":" 1.1 "," метод ":" POST "," пост ":" {\ ", используя \": \ "XPATH\" \ "значение \": \ "//[@идентификатор = '_ FZL']/SPAN/SVG/путь\" } "," URL ":" /элемент "," urlParsed ": {" якорь ":" "," запрос ":" "," файл ": элемент" "" каталог ":" / "," путь ":" /элемент "," относительный ":" /элемент "," порт ":" "," хозяин ":" "," пароль ":" "," пользователь ":" "" UserInfo ":" "," власть ":" "," протокол ":" "," источник ":" /элемент "," queryKey ": {}," куски: элемент"[ "" ]}," urlOriginal ":" /сеанса/feab13f0-720f-11e7-80b3-452aee308158/элемент "}}

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

Ответ 1

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

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

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

string html=driver.PageSource;

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

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

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

Первая ссылка XPath в PhantomJSDriver

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

Ответ 2

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

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

У вас есть пара вариантов:

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

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