Я пытаюсь получить токен из 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. Пожалуйста, помогите