2

好的,我有一个非常令人沮丧的问题。我正在解析一个网页,需要让它执行 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 信息而无需打开表单?

谢谢

4

4 回答 4

6

WebBrowser 组件具有带有 CancelEventArgs 的 NewWindow 事件。所以只需添加一个类似的处理程序:

void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
    e.Cancel = true;
}

当 javascript 尝试打开一个弹出窗口时,该事件被触发并取消它。

于 2009-04-25T18:44:48.260 回答
0

你能在文档中注入 Javascript 吗?你可以添加这个:

window.open = function() { return false; }
于 2009-04-25T18:38:47.773 回答
0

一个快速而肮脏的解决方案是使用 WebClient 将 html 下载到临时文件,将广告脚本替换为 string.Empty 并将文件加载到控件中。

于 2009-04-25T18:59:45.133 回答
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();
        }

再见

于 2009-10-01T11:39:36.453 回答