0
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。誰かが私を啓発できますか?

4

1 に答える 1

-2

Cookie または HttpWebRequest および HttpWebResponse で WebClient を使用することをお勧めします。

于 2013-08-19T17:03:34.413 に答える