C# Web应用程序C中的WebBrowser控件#
我在Web应用程序中使用WebBrowser控件。在DocumentCompleted事件中,我希望字符串中包含DocumentText。我的DocumentCompleted事件如下所示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
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中处理此内容。这样做:
祝你好运在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;