Я хочу войти в Google, используя Selenium WebDriver, и процесс работает нормально, когда WebDriver находится в нормальном состоянии, когда он открывает окно браузера Chrome, однако, если используется с «--headless» и «--disable-gpu "параметры, код выдает ошибку NoSuchElementException.
Мой код:
var chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = false;
ChromeOptions chrOptions = new ChromeOptions();
chrOptions.AddArgument("--headless");
chrOptions.AddArgument("start-maximized");
chrOptions.AddArgument("disable-infobars");
chrOptions.AddArgument("--disable-extensions");
//chrOptions.AddArguments("window-size=1920,1080");
IWebDriver driver = new ChromeDriver(chromeDriverService, chrOptions);
driver.Url = "https://www.google.com";
var button1 = driver.FindElement(By.XPath("//*[@id=\"gb_70\"]"));
button1.Click();
var login = driver.FindElement(By.Id("identifierId"));
login.SendKeys(Username);
var next0 = driver.FindElement(By.XPath("//*[@id=\"identifierNext\"]/content/span"));
next0.Click();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id=\"password\"]/div[1]/div/div[1]/input")));
Thread.Sleep(3000);
var passw = driver.FindElement(By.XPath("//*[@id=\"password\"]/div[1]/div/div[1]/input"));
passw.SendKeys(Password);
var final = driver.FindElement(By.XPath("//*[@id=\"passwordNext\"]/content/span"));
final.Click();
Фактический вывод:
OpenQA.Selenium.NoSuchElementException HResult = 0x80131500 Сообщение =нет такого элемента: невозможно найти элемент: {"method": "id", "selector": "identifierId"} (информация о сеансе: chrome без головы = 74.0.3729.131) (информация о драйвере: chromedriver = 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10s57e9e1/ branch -head / 3729 @ {# 29}), платформа = Windows NT 10.0.17134 x86_64) Source = WebDriver
Ожидаемый результат: успешный вход в Google.
Я также хотел бы добавить, что я пробовал бесчисленное множество различных методов, и ни один из них не работает и пытался найти другие решения.В конечном счете, это сводит меня к одной ошибке, которую я однажды увидел в консоли, которая гласила что-то вроде: «не удалось отобразить URLHERE, потому что для его x-frame-options задано значение deny». После дальнейших исследований я обнаружил, что это своего родабезопасности для предотвращения перехвата кликов.
Есть ли другой способ сделать это, используя WebRequests или HttpWebRequests?Может быть, я мог бы войти в систему с помощью веб-запросов и передать файлы cookie в драйвер Selenium.Будет ли это работать?