2012-09-13 18 views
5

Zajmuję się tworzeniem aplikacji Windows Forms w VS 2010 C# z kontrolą przeglądarki. Moim celem jest zautomatyzowanie nawigacji na tej stronie, ale gdy ja w pewnym momencie strona wyskoczy alert javascript, który zatrzyma automatyzację, aż do naciśnięcia przycisku OK. Rozwiązałem problem, symulując naciśnięcie klawisza Enter, gdy pojawiło się, ale aplikacja powinna pozostać skupiona, aby mogła działać. Moje pytanie brzmi, czy istnieje sposób na zabicie tego niestandardowego alertu javascript na stronie internetowej (nie mam dostępu do strony, zabić go od strony klienta), aby nie pojawił się lub w jakikolwiek inny sposób rozwiązać ten problem? Alert javascript (messagebox), który się pojawia, nie jest błędem, to alert javascript, który programiści tej witryny umieścili tam z jakiegoś powodu.Kontrola przez webBrowser zatrzymanie alertu javascript na stronie internetowej

+1

Zrobiło to trochę google: http://josheinstein.com/blog/index.php/2010/01/webbrowser-control-prevent-window-alert/ –

Odpowiedz

0

Możesz spróbować wykorzystać wydarzenie Navigated i przechwycić DocumentText przed załadowaniem strony, aby usunąć referencje alert(...);.

Od strony Navigated na MSDN:

obsłużyć zdarzenia Navigated aby otrzymać powiadomienie, gdy kontrola WebBrowser został przejściu do nowego dokumentu. Po wystąpieniu zdarzenia Navigated nowy dokument rozpoczął ładowanie, co oznacza, że ​​można uzyskać dostęp do załadowanej zawartości za pośrednictwem właściwości Document, DocumentText i DocumentStream.

Oto niektóre kodu:

using System.Windows.Forms; 
using System.Text.RegularExpressions; 

namespace Your.App 
{ 
    public class PopupSuppress 
    { 
     WebBrowser _wb; 
     public PopupSupress() 
     { 
      _wb = new WebBrowser(); 
      _wb.Navigated += new WebBrowserNavigatedEventHandler(_wb_Navigated); 
     } 

     void _wb_Navigated(object sender, WebBrowserNavigatedEventArgs e) 
     { 
      string alertRegexPattern = "alert\\([\\s\\S]*\\);"; 
      //make sure to only write to _wb.DocumentText if there is a change. 
      //This will prompt a reloading of the page (and another 'Navigated' event) [see MSDN link] 
      if(Regex.IsMatch(_wb.DocumentText, alertRegexPattern)) 
       _wb.DocumentText = Regex.Replace(_wb.DocumentText, alertRegexPattern, string.Empty); 
     } 
    } 
} 

Sources/Zasoby:

Powiązane problemy