.net 使用Windows.Forms.Webbrowser.Navigate()时禁用Javascript弹出窗口
好的,我有一个非常令人沮丧的问题。我正在解析一个网页,需要让它执行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"); 这是可行的,我能够很好地获得按钮元素,但
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次,效果很好!现在我心中有一个特别的地方,留给你这个善良的陌生人。