2

Ok, ich habe ein sehr frustrierendes Problem. Ich analysiere eine Webseite und muss Javascript ausführen, um die gewünschten Informationen zu erhalten.Deaktivieren Sie JavaScript-Popups bei Verwendung von Windows.Forms.Webbrowser.Navigate()

Form f = new Form(); 
WebBrowser w = new WebBrowser(); 
w.Navigate(url); 
f.Controls.Add(w); 
f.ShowDialog(); 
HtmlElementCollection hc = w.Document.GetElementsByTagName("button"); 

Dies funktioniert und ich bin in der Lage die Schaltfläche Elemente in Ordnung, zu erhalten, aber dann bekomme ich ein Pop-up jedes Mal wenn ich diese laufen. Sehr nervig. Das Popup ist JavaScript-basiert und ich muss Javascript ausführen, um die Informationen zum Button-Element zu erhalten. Hier ist das Skript für das Popup.

<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> 

habe ich versucht, in Schaufel, um möglicherweise ein Cookie an die Steuer Forms.Webbrowser zu hinzufügen bekam aber frustriert und gab auf. Ich habe versucht, die NoAllowNavagate-Eigenschaft und alles andere ohne Erfolg zu setzen.

Kann jemand helfen? Gibt es auch eine Möglichkeit, die DomDocument-Informationen von der Console.App abzurufen, ohne ein Formular öffnen zu müssen?

Danke

Antwort

6

Die WebBrowser-Komponente hat NewWindow-Ereignis mit CancelEventArgs. So fügen Sie einfach einen Handler ähnelt:

Wenn das Javascript versucht, ein Popup-Fenster zu öffnen, das Ereignis ausgelöst wird und bricht es.

+1

Wow, ich werde das jetzt ausprobieren. Das sieht sehr vielversprechend aus und hat den "Duh" -Faktor. Okay, ich habe es gerade 15 mal getestet und es funktioniert super! Ein besonderer Platz in meinem Herzen ist jetzt reserviert für dich, ein lieber Fremder. –

0

Können Sie Javascript in das Dokument einfügen? Sie könnten dies hinzufügen:

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

Ich bin wirklich lahm, wenn es um Javascript kommt. Ich habe nicht einmal realisiert, dass du Javascript einschleusen kannst. Wenn das der Fall ist, muss ich vielleicht nicht einmal den Weg gehen, den ich jetzt gehe. Danke für deinen Kommentar, ich werde mich darum kümmern. –

0

Eine schnelle und schmutzige Lösung wäre, WebClient zu verwenden, um das HTML in eine temporäre Datei herunterzuladen, das Anzeigenskript durch string.Empty zu ersetzen und die Datei in das Steuerelement zu laden.

+0

Ich versuchte diesen Ansatz, ich denke, ich habe versucht, die HTML in Stream nachher zu laden, aber hatte kein Glück. Ich weiß nicht, dass ich den WebClient weiter untersuchen muss, ich habe versucht, das zu tun, was Sie mit HttpWebRequest/WebResponse erwähnt haben. Vielen Dank –

0

sollten Sie SHDocVw.dll versuchen, automatisch neues Fenster zu fangen.

 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(); 
     } 

bye