2

Ok, j'ai un problème très frustrant. Je suis en train d'analyser une page Web et j'ai besoin de l'avoir exécuter le javascript afin d'obtenir l'information que je veux.Désactiver les popups Javascript lors de l'utilisation de 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"); 

Cela fonctionne et je suis en mesure d'obtenir les éléments de bouton bien, mais je reçois un pop-up à chaque fois que je lance ça. Très ennuyant. La popup est basée sur javascript et j'ai besoin de lancer Javascript pour obtenir les informations sur l'élément du bouton. Voici le script pour le 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> 

J'ai essayé à palettes d'ajouter éventuellement un cookie au contrôle Forms.Webbrowser mais suis frustré et abandonné. J'ai essayé de définir la propriété NoAllowNavagate et tout le reste en vain.

Quelqu'un peut-il aider? En outre, il existe un moyen d'obtenir les informations DomDocument à partir de Console.App sans avoir à ouvrir un formulaire?

Merci

Répondre

6

Le composant WebBrowser a un événement NewWindow avec CancelEventArgs. Donc, il suffit d'ajouter un gestionnaire semblable à:

Lorsque le javascript tente d'ouvrir une fenêtre pop-up l'événement se déclenche et l'annule.

+1

Wow, je vais essayer ça maintenant. Cela semble très prometteur et a le "duh" facteur à lui. Okay Je l'ai testé 15 fois et ça marche super! Une place spéciale dans mon coeur est maintenant réservée pour vous étranger gentil. –

0

Pouvez-vous injecter Javascript dans le document? Vous pouvez ajouter ceci:

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

Je suis vraiment boiteux en matière de Javascript. Je n'ai même pas réalisé que vous pourriez injecter Javascript. Si c'est le cas, je n'aurais peut-être même pas à suivre la route que je vais suivre. Merci pour votre commentaire, je vais examiner cela. –

0

Une solution rapide et sale serait d'utiliser WebClient pour télécharger le fichier html dans un fichier temporaire, remplacer le script publicitaire par string.Empty et charger le fichier dans le contrôle.

+0

J'ai essayé cette approche je pense, j'ai essayé de charger le html dans Stream après mais n'ai pas eu de chance. Je ne sais pas je dois étudier WebClient plus loin, j'ai essayé de faire ce que vous avez mentionné en utilisant HttpWebRequest/WebResponse. Merci –

0

vous devriez essayer SHDocVw.dll pour attraper automatiquement une nouvelle fenêtre.

 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