Я пытаюсь программно войти на сайт, подобный espn.com.Настройка сайта происходит, когда я нажимаю на кнопку «Вход», расположенную на главной странице, в середине экрана отображается всплывающее окно «Вход в систему» со слегка окрашенным фоном.Моя цель состоит в том, чтобы программно получить это всплывающее окно, указать имя пользователя и пароль и отправить его в надежде, что мне вернется файл cookie для использования в качестве аутентификации.Однако, поскольку для отображения формы используется Javascript, мне не обязательно иметь легкий доступ к тегам ввода формы через HTML-код главной страницы.
Однако я попытался исследовать различные решения, такие как HttpClient и HttpWebRequest.Похоже, что веб-браузер лучше, так как форма входа отображается с использованием Javascript.Поскольку мне не обязательно иметь легкий доступ к тегам ввода формы, веб-браузер кажется лучшей альтернативой для захвата элементов ввода всплывающего окна.
class ESPNLoginViewModel
{
private string Url;
private WebBrowser webBrowser1 = new WebBrowser();
private SHDocVw.WebBrowser_V1 Web_V1;
public ESPNLoginViewModel()
{
Initialize();
}
private void Initialize()
{
Url = "http://www.espn.com/";
Login();
}
private void Login()
{
webBrowser1.Navigate(Url);
webBrowser1.DocumentCompleted +=
new WebBrowserDocumentCompletedEventHandler(webpage_DocumentCompleted);
Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;
Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow);
}
//This never gets executed
private void Web_V1_NewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
{
//I'll start determing how to code this once I'm able to get this invoked
}
private void webpage_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElement loginButton = webBrowser1.Document.GetElementsByTagName("button")[5];
loginButton.InvokeMember("click");
//I've also tried the below InvokeScript method to see if executing the javascript that
//is called when the Log In button is clicked, however Web_V1_NewWindow still wasn't called.
//webBrowser1.Document.InvokeScript("buildOverlay");
}
}
Я ожидаю, что обработчик Web_V1_NewWindow будет вызываться при вызове метода InvokeMember ("click").Однако выполнение кода выполняется только через обработчик webpage_DocumentCompleted без каких-либо вызовов Web_V1_NewWindow.Возможно, мне нужно использовать метод, отличный от InvokeMember («click»), чтобы вызвать обработчик события нажатия кнопки «Войти».Или мне может понадобиться что-то совершенно другое.Я не уверен на 100%, что Web_V1.NewWindow - правильный подход для моих нужд, но я видел, что NewWindow часто используется при работе с всплывающими окнами, поэтому я решил, что мне следует попробовать.
Любая помощь будетЯ буду очень признателен, поскольку потратил на это значительное количество времени.