0
我試圖從URL中解析包含大量Javascript生成內容的內容,爲此我使用WebBrowser控件。最初,當我在對象的同一個實例中加載目標網址列表的所有url時,我遇到了很多問題,因此我決定每隔幾個請求處理一個對象,然後創建一個新實例等等。我現在面臨的問題是,有時,當我處理對象時,它會打開一個新的IE瀏覽器窗口,與我的應用程序無關,加載已經處理的對象的url。這裏是我的代碼:WebBrowser啓動Internet Explorer
我在這篇文章中看到了類似的答案,但它不適合我。
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();
}
}
UPDATE:
我想通了什麼導致了問題。這並不是針對所有頁面發生的,而只針對一些嵌入式JS觸發外部頁面。通過捕獲Navigating事件並取消對該頁面的腳本調用,它解決了這個問題。
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;
}
}
你可以接受你自己的答案。 –