【问题标题】:webBrowser1.Navigate(url) ReadyStatewebBrowser1.Navigate(url) 就绪状态
【发布时间】:2015-08-21 18:54:51
【问题描述】:

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

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;
                }
            }
        }

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

【问题讨论】:

    标签: c# url browser


    【解决方案1】:

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

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

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

    但即使这样在某些情况下也可能不起作用(请参阅this)。

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

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多