首页 > 解决方案 > WebBrowser. 使用 JavaScript 导航

问题描述

我在 System.Windows.Forms 中使用 WebBrowser 组件。该代码从网站加载内容并正确返回。在页面完全加载后,有一个 JavaScript 会执行并加载一些 DOM。

在 .Navigate 方法完成执行时,JavaScript 尚未完成加载。如果我在调试模式下在 .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);
};

希望能找到一些帮助。

标签: javascriptc#winformswebbrowser-control

解决方案


推荐阅读