Соскрести или получить URL-токен из веб-приложения, запускаемого без использования Chrome - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь получить токен из URL, отображаемого при входе в веб-приложение. Я использую Chrome без головы через ChromeOptions. Проблема в том, что после входа в систему токен быстро отображается, а затем исчезает из URL. Как обходной путь, я снял chromeoptions для запуска браузера без головы, и я могу успешно получить токен вовремя. Я предполагаю, что этот процесс заметно медленнее, чем безголовый. Мне было интересно, есть ли способ сделать это без головы. Вот мой код

        //var chromeOptions = new ChromeOptions();
        //chromeOptions.AddArguments("headless");                      
        string tokenizedUrl = null;
        string token = null;

        string validUser = AtConfiguration.GetConfiguration("userName");
        string validPass = AtConfiguration.GetConfiguration("password");

        using (var browser = new ChromeDriver(/*chromeOptions*/))
        {

            bool found = false;
            browser.Navigate().GoToUrl(AtConfiguration.GetConfiguration("baseURL"));

            if (browser.FindElements(By.XPath("//A[@id='uxOptInLink']")).Count !=0)
            {
                    browser.FindElement(By.XPath("//A[@id='uxOptInLink']")).Click();
            }

            browser.FindElement(By.Name("loginfmt")).SendKeys(validUser);

            browser.FindElement(By.Id("idSIButton9")).Click();

            if (browser.FindElements(By.XPath("//*[text()='Work or school account']")).Count != 0)
            {
                browser.FindElement(By.XPath("//*[text()='Work or school account']")).Click();
            }

            WebDriverWait wait = new WebDriverWait(browser, TimeSpan.FromMinutes(1));
            wait.PollingInterval = TimeSpan.FromMilliseconds(500);
            wait.Until(wd => browser.FindElements(By.Name("Password")).Count > 0);

            browser.FindElement(By.Name("Password")).SendKeys(validPass);

            browser.FindElement(By.Id("submitButton")).Click();
            //maybe implement do while

            while (found == false)
            {
                if (browser.Url.Contains("token"))
                {
                    tokenizedUrl = browser.Url;
                    found = true;
                    break;
                }
            }

            int index = tokenizedUrl.IndexOf("=");

            int index2 = tokenizedUrl.IndexOf("&");
            int index3 = index2 - 1;

            token = tokenizedUrl.Substring(index + 1, index3-index);

Единственный другой вариант - сделать это, вызвав обратный вызов во время нажатия кнопки отправки, в которой будет храниться токен. Однако я не уверен, как это сделать, поскольку я использую Visual Studio Selenium C # и даже не включаю nodeJ. Пожалуйста, помогите

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