好的,我有一个非常令人沮丧的问题。我正在解析一个网页,需要让它执行javascript才能获得我想要的信息。
Form f = new Form();
WebBrowser w = new WebBrowser();
w.Navigate(url);
f.Controls.Add(w);
f.ShowDialog();
HtmlElementCollection hc = w.Document.GetElementsByTagName("button");
这有效,我可以将按钮元素设置得很好,但每次运行时我都会弹出一个弹出窗口。很烦人。弹出窗口是基于javascript的,我需要运行Javascript来获取按钮元素信息。这是弹出窗口的脚本。
<script>
var evilPopup = (getCookieVar("markOpen","PromoPop") == 1);
if (evilPopup != 1)
{
PromoPop = window.open('/browse/info.aspx?cid=36193','Advertisement', 'width=365,height=262,screenX=100,screenY=100');
if (PromoPop)
{
PromoPop.blur();
window.focus();
setCookieVar("markOpen","PromoPop","1");
}
}
</script>
我在风向标中试图将一个cookie添加到Forms.Webbrowser控件中但却感到沮丧并放弃了。我尝试设置NoAllowNavagate属性,其他一切都无济于事。
有人可以帮忙吗?另外,有一种方法可以从Console.App获取DomDocument信息而无需打开表单吗?
由于
答案 0 :(得分:6)
WebBrowser组件具有带有CancelEventArgs的NewWindow事件。所以只需添加一个类似于:
的处理程序void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
}
当javascript尝试打开弹出窗口时,事件会被触发并取消它。
答案 1 :(得分:0)
您可以将Javascript注入文档吗?你可以添加这个:
window.open = function() { return false; }
答案 2 :(得分:0)
快速而肮脏的解决方案是使用WebClient将html下载到临时文件,用string.Empty替换广告脚本并在控件中加载文件。
答案 3 :(得分:0)
你应该尝试SHDocVw.dll来自动捕捉新窗口。
private SHDocVw.WebBrowser_V1 Web_V1;
// write it on form load event
Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;
Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow);
private void Web_V1_NewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
{
Processed = true; //Stop event from being processed
//Code to open in same window
//this.webBrowser1.Navigate(URL);
//Code to open in new window instead of same window
frmEBeyanname Popup = new frmEBeyanname();
Popup.webBrowser1.Navigate(URL);
Popup.Show();
}
再见