2

Хорошо, у меня очень неприятная проблема. Я разбираю веб-страницу и должен выполнить ее javascript, чтобы получить нужную мне информацию.Отключить всплывающие окна Javascript при использовании 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"); 

Это работает и я в состоянии получить кнопку элементы нормально, но затем я получаю всплывающее каждый раз я бегу это. Очень надоедливый. Всплывающее окно основано на 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> 

Я пытался в лопатке, чтобы, возможно, добавить печенье к контролю Forms.Webbrowser, но получил разочарование и сдался. Я попытался установить свойство NoAllowNavagate и все остальное безрезультатно.

Может ли кто-нибудь помочь? Кроме того, есть способ получить информацию DomDocument из Console.App без необходимости открывать форму?

Thanks

ответ

6

Компонент WebBrowser имеет событие NewWindow с CancelEventArgs. Так что просто добавить обработчик, подобный:

Когда Javascript пытается открыть всплывающее окно события получает срабатывает и отменяет его.

+1

Ничего себе, я собираюсь попробовать это прямо сейчас. Это выглядит очень многообещающим и имеет фактор «duh». Хорошо, я просто проверил его 15 раз, и он отлично работает! Особое место в моем сердце теперь зарезервировано для вас доброго незнакомца. – 2009-04-25 19:27:26

0

Можете ли вы вставить Javascript в документ? Вы можете добавить это:

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

Я действительно хромает, когда дело доходит до Javascript. Я даже не понял, что вы можете добавить Javascript. Если это так, мне, возможно, даже не придется идти по маршруту, куда я иду. Спасибо за ваш комментарий, я посмотрю на это. – 2009-04-25 19:18:21

0

Быстрое и грязное решение заключается в использовании WebClient для загрузки html во временный файл, замените скрипт объявления на string.Empty и загрузите файл в элемент управления.

+0

Я пробовал этот подход. Думаю, я попытался загрузить html в Stream после этого, но мне не повезло. Я не знаю, что мне нужно изучить WebClient дальше, я попытался сделать то, что вы упомянули, используя HttpWebRequest/WebResponse. благодаря – 2009-04-25 19:21:19

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

свиданья