我正在System.Windows.Forms中使用WebBrowser组件。该代码从网站加载内容并正确返回。页面完全加载后,会执行一个JavaScript并加载一些DOM。
.Navigate方法完成执行时,JavaScript尚未完成加载。如果我在Debug模式下在.Navigate上设置了一个断点,则很明显,因为.Navigate是异步的,它将贯穿加载包括脚本的页面的过程。
void LoadPageWithScripts() {
Browser.Navigate("mypagewithscriptsurl");
// whatever comes next prevents the DOM generated by the script from beeing loaded
// ... e.g.:
Console.WriteLine("whatever");
// use Browser.Document later
}
我知道,这个问题与此处提供的问题类似:JavaScript only works...
不幸的是,我对加载的页面没有任何影响,所以我在那里看到的方法不适合我的需求。
正如许多论坛所建议的那样,我试图简单地使用Thread.Sleep。但是,即使这样也行不通。一旦代码继续通过.Navigate方法运行,JavaScript就会丢失。目前仅在其上设置一个断点即可。
Browser.Navigate(“ pageUrl”);
Browser.Navigate("pageurl");
// Very bad solution
Thread.Sleep(2000);
while (true)
{
if (Browser.ReadyState == WebBrowserReadyState.Complete)
{
// do something
break;
}
else
{
Application.DoEvents();
}
}
无法使用DocumentCompleted事件,因为在文档处于完成状态之前不会加载脚本。
Browser.Navigate("pageUrl");
Browser.DocumentCompleted += (o, e) =>
{
var text = Browser.DocumentText;
Console.WriteLine(text);
};
希望能找到帮助。