public void PortalLogin()
{
string portalUrl = "URL";
string portalEmail = "email";
string portalPassword = "password";
// Run when page finishes navigating
webBrowser2.DocumentCompleted += (s, e) =>
{
HtmlElement head = webBrowser2.Document.GetElementsByTagName("head")[0];
HtmlElement testScript = webBrowser2.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)testScript.DomElement;
element.text = "function PortalLogin() { document.getElementById('username').value = '" + portalEmail + "'; document.getElementById('password').value = '" + portalPassword + "'; document.getElementById('credentials').submit(); }";
head.AppendChild(testScript);
webBrowser2.Document.InvokeScript("PortalLogin");
};
// Navigate to the portal
webBrowser2.Navigate(portalUrl);
while (this.webBrowser2.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
Thread.Sleep(100);
}
}
上記のコード セグメントはNavigate
特定の URL に想定されており、Navigate の完了時にスクリプトを実行して、そこにある Web ページにログインします。ここで、関数全体PortalLogin()
が while ループ内にあるため、以下を含める必要があります。
while (this.webBrowser2.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
Thread.Sleep(100);
}
while ループが Navigate 関数を大幅に中断しないようにセグメント化します。ただし、コードは完全に機能していません。ブレークポイントを使用してステップ実行すると、フローがオフになっているようです。問題の一部は、while ループ テストがどのように機能するかをよく理解していないことだと思いますReadState != Complete
。誰かが私を啓発できますか?