Web应用程序C#中的WebBrowser控件

时间:2012-10-11 16:53:26

标签: c# web-applications webbrowser-control

我在Web应用程序中使用WebBrowser Control。在DocumentCompleted事件上我想在我的字符串中使用DocumentText。我的文档完成事件就像是跟随。

void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    string str = IEBrowser.DocumentText;
}

现在问题是我想要的DocumentText我没有在DocumentCompleted Event中得到它。我认为有些javascript可以在DocumentCompleted事件之后执行。所以我改变了我的代码。

void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    Thread th = new Thread(new ThreadStart(startthread));
    th.Start();              
}

public void startthread()
{
   //To Wait untill WebBrowser run that javascript
   Thread.Sleep(5000);
   string str = IEBrowser.DocumentText; 
}

现在使用此代码,我得到“指定的强制转换无效”。 如何等待运行WebBrowser的线程?

2 个答案:

答案 0 :(得分:1)

虽然我不认为这是一个很好的方法,但其中一种方法是:不要在DocumentComplete中处理它。做这样的事情:

  1. 做你需要做的事......然后在某一点上,浏览器需要导航到一个网址,然后(你可能需要检查语法,只需输入我的标题):

                IEBrowser.Navigate(url);
            bool flag = true;
            int times = 0;
            while (flag)
            {
                Sleep(500);
                Application.DoEvent();
    
                if (IEBrowser.ReadyState == WebBrowserReadyState.Complete)
                {
                    times ++;
                }
                else
                {
                    times = 0;
                }
    
                if (times >= 10)
                {
                    flag = false;
                }
            }
    
            string str = IEBrowser.DocumentText;
    
  2. 同样,这只是一个让你尝试的工作。取决于你的目的,这可以改善很多。但我使用类似于此的程序进行许多刮削工作,并且工作正常。取决于页面,documentComplete可能会被多次触发。

    祝你好运

答案 1 :(得分:0)

我不太确定你在这里做了什么,但我可以保证你开始这个线程不是正确的解决方案。

试试这个,因为根据我的经验,应该多次调用IEBrowser_DocumentCompleted ......

void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {     
if (IEBrowser.ReadyState = WebBrowserReadyState.Complete)         
     {
       //Do my stuff
     }
}

不确定这是否适合你,但我过去已经成功了......