WebBrowser为空DocumentText(模拟单击)

时间:2013-06-19 21:35:56

标签: c# multithreading browser

场景是当我点击开始按钮开始这个帖子时:

var t = new Thread(get_webbrowser_page);
t.SetApartmentState(ApartmentState.STA);
t.Start();

启动此功能:

public void get_webbrowser_page()
{
    WebBrowser browser = new WebBrowser();
    browser.Navigate("http://www.google.com");
    string htmla = "as";
    browser.DocumentCompleted += (s, e) =>
    {
        var html = browser.DocumentText;
        htmla = html.ToString();
    };
    MessageBox.Show("ASD=" + htmla);
}

我的任务是模拟点击href元素,但我不能这样做,因为DocumentText总是空的。

我已经解决了这个WebBrowser - empty DocumentText问题,但它并不适用于我。 我哪里错了?

2 个答案:

答案 0 :(得分:0)

首先,将消息框放在事件处理程序中,如Pragmateek建议的评论。请注意,DocumentCompleted事件是按帧/ iframe触发的。很高兴知道。看到这个问题/答案:https://stackoverflow.com/a/3431520/767926

答案 1 :(得分:0)

好的,我也在这里红了WebBrowser DocumentCompleted event fired more than once现在我的代码是:

var t = new Thread(startNavigate);
            t.SetApartmentState(ApartmentState.STA);
            t.Start();

private int mFrameCount;
        public WebBrowser webBrowser1 = new WebBrowser();
        private void startNavigate()
        {
            string url = "http://www.google.com";
            mFrameCount = 0;
            webBrowser1.Navigate(url);
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (e.Url.Equals(webBrowser1.Url))
            {
                MessageBox.Show("Now it is really done");
            }
        }

        private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            mFrameCount += 1;
            bool done = true;
            if (webBrowser1.Document != null)
            {
                HtmlWindow win = webBrowser1.Document.Window;
                if (win.Frames.Count > mFrameCount && win.Frames.Count > 0) done = false;
            }
            if (done)
            {
               MessageBox.Show("Now it is really done");
            }
        }

但它还没有工作......我很难理解如何使用WebBrowser ......!

(在第一个代码中,我改变了消息框的位置而没有结果)