Как скрыть 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