WebBrowser.Navigate使用JavaScript

时间:2018-12-05 14:24:19

标签: javascript c# winforms webbrowser-control

我正在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);
};

希望能找到帮助。

0 个答案:

没有答案