我的情况是,一个相当聪明的网站通过TCP连接通过Shockwave Flash更新网站上的最新信息。然后,通过JavaScript将收到的数据更新到页面上,以便获取最新数据,需要浏览器。如果尝试使用连续请求访问网站,则a)您被禁止并且b)您实际上并未获取最新数据,只有最后更新的基本框架。
所以我需要运行一个启用了脚本的浏览器。
我的第一个问题是,在.NET中使用标准WPF WebBrowser,我得到以下警告,这些警告在标准IE,Chrome或Firefox中都没有。造成这种情况的原因是什么,我如何压制/允许它,但仍然允许运行该站点的脚本?
我的第二个问题涉及到有更好的方法吗?或者是否有更好的WebBrowser控件替代方案
允许运行脚本
可以访问至少以文本格式返回的DOM或html和脚本
与WPF兼容
可以隐藏浏览器,因为我实际上并不想显示它。
到目前为止,我已经研究过WebKit.NET,它似乎不允许访问DOM,并且在我测试时也不喜欢WPF窗口,而且Awesomium也似乎不允许直接访问DOM没有javascript。
还有其他选择(除了黑客攻击他们的脚本)吗?
谢谢
答案 0 :(得分:2)
设置WebBrowser.ScriptErrorsSuppressed = true;
答案 1 :(得分:2)
最终,我最终保留了WPF控件,并使用this代码注入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);
}
}
答案 2 :(得分:1)
WPF WebBrowser
没有此属性作为WinForms控件。
您最好在WPF应用程序中使用WindowsFormsHost
并使用WinForms WebBrowser
(以便您可以使用SuppressScriptErrors
。)确保您完全信任。< / p>