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

C# Web应用程序C中的WebBrowser控件#,c#,web-applications,webbrowser-control,C#,Web Applications,Webbrowser Control,我在Web应用程序中使用WebBrowser控件。在DocumentCompleted事件中,我希望字符串中包含DocumentText。我的DocumentCompleted事件如下所示 void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { string str = IEBrowser.DocumentText; } 现在的问题是我想要的DocumentTex

我在Web应用程序中使用WebBrowser控件。在DocumentCompleted事件中,我希望字符串中包含DocumentText。我的DocumentCompleted事件如下所示

void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    string str = IEBrowser.DocumentText;
}
现在的问题是我想要的DocumentText,我在DocumentCompleted事件中没有得到它。我认为有一些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运行的线程等待?

我不太确定您在这里做什么,但我可以向您保证,启动该线程不是正确的解决方案

试试这个,因为根据我的经验,IEBrowser\u DocumentCompleted应该被调用几次

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

不确定这是否适用于您,但我过去在这方面取得了成功…

虽然我不认为这是一种好方法,但有一种方法是:不要在DocumentComplete中处理此内容。这样做:

  • 做你需要做的一切。。。然后,浏览器需要导航到url,然后(您可能需要检查语法,只需键入我的标题):

  • 再说一次,这只是一个你可以尝试的工作。这取决于你的目的,可以改进很多。但我在很多刮削工作中使用了类似的程序,效果很好。根据页面的不同,documentComplete可能会触发多次


    祝你好运

    在web应用程序中使用web浏览控件?是否尝试在web应用程序中刮取某些内容?一个更好的方法是使用httpwebrequest,甚至webclient。你是对的,我试过了,但它对我不起作用。我认为javascript会在ReadyState完成后运行。如果您想尝试等待5秒,请使用TimerCallback,但我不会将其用于任何类型的生产解决方案,因为它是不确定的。您还可以将脚本注入页面,您可以使用它来确定等待的Javascript是否已经完成……以下是有关脚本注入的详细信息,甚至可以从中获得结果:非常感谢,它正是我想要的工作方式。我现在创建了我的代码。我需要完成我的代码,所以需要一些额外的帮助。您将Sleep()放在代码中。这与Thread.Sleep()相同;。因为如果它是Thread.Sleep(),它将停止执行,所以我不包括它。我将把它放在一个TimeCallback中,这样你仍然可以间隔检查它,你仍然可以停止它,它不会杀死你的主线程。。。
                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;