2

我有一种情况,一个相当聪明的网站通过 TCP 连接通过 Shockwave Flash 更新网站上的最新信息。收到的数据然后通过 JavaScript 更新到页面上,因此为了获取最新数据,需要浏览器。如果试图通过不断的请求访问该网站,那么 a) 你会被禁止,并且 b) 你实际上并没有获得最新的数据,只有最后更新的基础框架。

所以我需要运行一个启用脚本的浏览器。

我的第一个问题是,在 .NET 中使用标准 WPF WebBrowser 我会收到以下警告,而这些警告在标准 IE、Chrome 或 Firefox 中是没有的。是什么导致了这种情况,我如何抑制/允许它但仍然允许运行该站点的脚本?

在此处输入图像描述

我的第二个问题涉及到是否有更好的方法来做到这一点,或者是否有更好的替代 WebBrowser 控件的方法

  • 允许脚本运行

  • 可以访问至少以文本格式返回的 DOM 或 html 和脚本

  • 与 WPF 兼容

  • 可以隐藏浏览器,因为我实际上并不希望它显示。

到目前为止,我已经研究了 WebKit.NET,它似乎不允许访问 DOM,并且在我测试时不喜欢 WPF 窗口以及 Awesomium,但似乎又不允许在没有 javascript 的情况下直接访问 DOM。

还有其他选择吗(除了破解他们的脚本)?

谢谢

4

3 回答 3

2

WebBrowser.ScriptErrorsSuppressed = true;

于 2012-09-21T15:29:27.090 回答
2

最终,我最终保留了 WPF 控件并使用代码注入 JavaScript 脚本以禁用 JavaScript 错误。Microsoft HTML Object Library需要添加的。

    private const string DisableScriptError =    @"function noError() { return true;} window.onerror = noError;";

    private void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        InjectDisableScript();
    }

    private void InjectDisableScript()
    {

        HTMLDocumentClass doc = webBrowser1.Document as HTMLDocumentClass;
        HTMLDocument doc2 = webBrowser1.Document as HTMLDocument;

        IHTMLScriptElement scriptErrorSuppressed = (IHTMLScriptElement)doc2.createElement("SCRIPT");
        scriptErrorSuppressed.type = "text/javascript";
        scriptErrorSuppressed.text = DisableScriptError;
        IHTMLElementCollection nodes = doc.getElementsByTagName("head");

        foreach (IHTMLElement elem in nodes)
        {
            HTMLHeadElementClass head = (HTMLHeadElementClass)elem;
            head.appendChild((IHTMLDOMNode)scriptErrorSuppressed);
        }
    }
于 2012-09-22T17:31:22.480 回答
1

WPFWebBrowser没有这个属性作为 WinForms 控件。

您最好WindowsFormsHost在 WPF 应用程序中使用 a 并使用 WinForms WebBrowser(以便您可以使用SuppressScriptErrors.)。确保您在完全信任的情况下运行。

于 2012-09-21T15:43:05.063 回答