Как войти в Google с помощью Selenium Headless в C # - PullRequest
0 голосов
/ 10 мая 2019

Я хочу войти в 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.Будет ли это работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...