我尝试解析包含大量Javascript生成内容的网址中的内容,因为我使用的是WebBrowser控件。最初,当我在对象的同一个实例中加载目标URL列表的所有url时,我遇到了很多问题,因此我决定每隔几个请求处理该对象,然后创建一个新实例,依此类推。我现在面临的问题是,有时,当我处理对象时,它会打开一个新的IE浏览器窗口,独立于我的应用程序,加载我已经处理过的对象的URL 。这是我的代码:
我在这篇文章中看到了类似的答案,但它并不适合我。
Why is sometimes WebBrowser.Dispose() launching Internet Explorer?
private void TriggerNavigation ()
{
if (urlList.Count > 0)
{
progressBar1.Value++;
if (LoopUrls++ >= 1)
{
URL = string.Empty;
LoopUrls = 0;
timerAjaxLoad.Stop();
webBrowser1.Stop();
webBrowser1.AllowNavigation = false;
webBrowser1.Dispose();
webBrowser1 = null;
GC.Collect();
webBrowser1 = new WebBrowser();
}
URL = urlList.First();
label1.Text = "Processing.." + URL;
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.Navigate(URL);
webBrowser1.Navigating += webBrowser1_Navigating;
timerAjaxLoad.Start();
urlList.RemoveAt(0);
}
else
{
timerAjaxLoad.Stop();
}
}
更新
我弄清楚是什么导致了这个问题。所有页面都没有发生这种情况,但仅适用于触发外部页面的嵌入式JS。通过捕获导航事件并取消对该页面的脚本调用,它解决了该问题。
void webBrowser1_Navigating (object sender, WebBrowserNavigatingEventArgs e)
{
foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("script"))
{
if (x.OuterHtml.Contains("survey"))
e.Cancel = true;
}
foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("iframe"))
{
e.Cancel = true;
}
}
答案 0 :(得分:0)
我弄清楚是什么导致了这个问题。所有页面都没有发生这种情况,但仅适用于触发外部页面的嵌入式JS。通过捕获导航事件并取消对该页面的脚本调用,它解决了该问题。
void webBrowser1_Navigating (object sender, WebBrowserNavigatingEventArgs e)
{
foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("script"))
{
if (x.OuterHtml.Contains("survey"))
e.Cancel = true;
}
foreach (HtmlElement x in ((WebBrowser)sender).Document.GetElementsByTagName("iframe"))
{
e.Cancel = true;
}
}