2012-09-13 19 views
5

Im desarrollando una aplicación de Windows Forms en VS 2010 C# con control webbrowser. Mi objetivo es automatizar la navegación en este sitio web, pero cuando estoy en un punto determinado, el sitio web mostrará una alerta de javascript que detendrá la automatización hasta que presione el botón Aceptar. Resolví un poco el problema simulando "enter press" cuando apareció, pero la aplicación debe permanecer enfocada para que funcione. Mi pregunta es, ¿hay alguna manera de eliminar esta alerta de javascript personalizada del sitio web (no tengo acceso a un lado, matarlo desde el lado del cliente) por lo que no aparece o de otra manera para solucionar este problema? La alerta de javascript (messagebox) que aparece no es un error, es una alerta de javascript que los programadores de ese sitio web pusieron allí por algún motivo.webBrowser control stop javascript alerta del sitio web

+1

Un poco de google encontró esto: http://josheinstein.com/blog/index.php/2010/01/webbrowser-control-prevent-window-alert/ –

Respuesta

0

Puede intentar consumir el evento Navigated e interceptar el DocumentText antes de cargar la página para eliminar las referencias alert(...);.

Desde la página Navigated en el MSDN:

controlar el evento Navigated para recibir una notificación cuando el control WebBrowser ha navegado a un nuevo documento. Cuando se produce el evento Navigated, el nuevo documento ha comenzado a cargarse, lo que significa que puede acceder al contenido cargado a través de las propiedades Document, DocumentText y DocumentStream.

Aquí hay algo de código:

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

Fuentes/Recursos:

Cuestiones relacionadas