webBrowser1.Navigate(url)ReadyState

时间:2015-06-07 04:12:31

标签: c# url browser

我需要使用表单中的webBrowser1导航到某个网址并执行某些操作:

webBrowser1.Url = new Uri(@url);
webBrowser1.Navigate(new Uri(@url));
var state = webBrowser1.ReadyState;

        HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("a");

        foreach (HtmlElement link in links)
        {
            if (link.InnerText != null)
            {
                if (link.InnerText.Equals("Log in"))
                {
                    link.InvokeMember("Click");
                    webBrowser1.Document.GetElementById("templateLoginPopupUsername").InnerText = username;
                    HtmlElementCollection input = webBrowser1.Document.GetElementsByTagName("input");
                    foreach (HtmlElement item in webBrowser1.Document.All)
                    {
                        if (item.Name == "password")
                        {
                            item.InnerText = password;
                            break;
                        }
                    }
                    break;
                }
            }
        }

页面仅在代码完全执行时加载,因此我无法对其执行任何操作。有没有办法强制浏览器加载?

1 个答案:

答案 0 :(得分:0)

首先,您的代码在到达循环之前会崩溃。如果请求的页面未按时加载,则webBrowser1.Document对象可能不可用。您应该在文档加载完成后执行此循环,即创建一个事件处理程序,例如这个

protected void DocumentCompletedHandler(Object sender, EventArgs e)
{
//Your code here
}

然后,要将此处理程序附加到webBrowser1对象,请使用
webBrowser1.DocumentCompleted +=DocumentCompletedHandler;

但即便如此,在某些情况下也可能无效(请参阅this)。

此外,您的代码似乎是出于恶意目的。你不应该这样做。