Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用Windows.Forms.Webbrowser.Navigate()时禁用Javascript弹出窗口_.net_Javascript_Popup_Webbrowser Control_Console Application - Fatal编程技术网

.net 使用Windows.Forms.Webbrowser.Navigate()时禁用Javascript弹出窗口

.net 使用Windows.Forms.Webbrowser.Navigate()时禁用Javascript弹出窗口,.net,javascript,popup,webbrowser-control,console-application,.net,Javascript,Popup,Webbrowser Control,Console Application,好的,我有一个非常令人沮丧的问题。我正在解析一个网页,需要让它执行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以获得我想要的信息

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>

var-popup=(getCookieVar(“markOpen”、“PromoPop”)==1);
如果(弹出窗口!=1)
{
PromoPop=window.open('/browse/info.aspx?cid=36193','advision','width=365,height=262,screenX=100,screenY=100');
if(PromoPop)
{
PromoPop.blur();
window.focus();
setCookieVar(“markOpen”、“PromoPop”、“1”);
}
}
我试图在vane中给表单添加一个cookie。Webbrowser控件,但失败了,我放弃了。我试图设置NoAllowNavagate属性和其他一切都没有用

有人能帮忙吗?还有,有没有一种不用打开表单就可以从Console.App获取DomDocument信息的方法


谢谢

您能将Javascript注入文档吗?您可以添加以下内容:

window.open = function() { return false; }

WebBrowser组件具有带有CancelEventArgs的NewWindow事件。因此,只需添加一个类似以下内容的处理程序:

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

当javascript试图打开弹出窗口时,事件将被触发并取消。

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

您应该尝试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();
        }

再见

说到Javascript,我真的很蹩脚。我甚至没有意识到你可以注入Javascript。如果是这样的话,我甚至不必走我现在要走的路。谢谢你的评论,我会调查的。我尝试过这种方法,我想,我尝试过在流中加载html,但没有任何运气。我不知道我还需要进一步研究WebClient,我试着用HttpWebRequest/WebResponse做你提到的事情。谢谢,我现在就要试试这个。这看起来很有希望,而且有“duh”的因素。好的,我刚刚测试了15次,效果很好!现在我心中有一个特别的地方,留给你这个善良的陌生人。