2011-02-04 18 views
6

He visto una gran cantidad de mensajes con respecto a este tema en particular en lo que además de en la web en general, y la mayoría si no todo el código es como se ve a continuaciónPresentación de una forma página web utilizando el control WebBrowser en C#

private void btnSubmit_Click(object sender, RoutedEventArgs e) 
{ 
    webBrowser1.Navigate(new Uri("http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onsubmit.htm")); 
} 

private void btnLogin_Click(object sender, RoutedEventArgs e) 
{ 
    mshtml.HTMLDocument htmlDoc = null; 

    htmlDoc = (mshtml.HTMLDocument) this.webBrowser1.Document; 

    if (webBrowser1.Document != null) 
    { 
     foreach (mshtml.HTMLFormElement form in htmlDoc.forms) 
     { 
      form.submit(); 
      break; 
     } 
    } 
} 

El código no tiene ningún error, pero por la vida no está presentando. La página de muestra que estoy usando tiene un botón simple, lo que hace, alerta la selección del botón de opción y luego envía el formulario. Por algún extraño motivo cuando el formulario se envía por código con el control WebBrowser, el formulario se envía pero la alerta nunca aparece.

No estoy seguro de lo que estoy haciendo mal aquí. Cualquier ayuda en esto sería apreciada.

+0

¿Puedo preguntar por qué estás tratando de hacer esto? –

+0

¿Cómo enlazaste el evento y para qué? –

+1

@Matti, estoy tratando de automatizar un procedimiento de inicio de sesión en una red interna que no tiene la opción recordarme. – vikramjb

Respuesta

6

¿Realizar un clic en el botón hace lo que necesita hacer? Deberá agregar una referencia COM a la Biblioteca de objetos HTML de Microsoft (que posiblemente ya tenga). Por ejemplo, si se carga a Google en el control WebBrowser, este código colocará "hola mundo" en el cuadro de búsqueda y realizar la búsqueda:

 mshtml.IHTMLDocument2 doc = ((mshtml.HTMLDocumentClass)webBrowser1.Document); 


     ((mshtml.IHTMLElement)doc.all.item("q")).setAttribute("value", "hello world"); 
     MessageBox.Show("Clicking I'm feeling lucky button"); 
     ((mshtml.HTMLInputElement)doc.all.item("btnI")).click(); 

Edición: He actualizado el código de los componentes que el WebBrowser WPF usos de control. También tenga en cuenta que esto a veces arroja un error de script de Google, pero que parece ser un problema de tiempo basado en algunas de las llamadas ajax que google tiene en la página de inicio.

+0

El método All no parece estar presente en el control webBrowser1. Me estoy perdiendo de algo ? – vikramjb

+0

La propiedad .all es miembro del miembro .Document de la clase webbrowser. Ha estado disponible desde .net 2.0: http://msdn.microsoft.com/en-US/library/system.windows.forms.htmldocument.all(v=VS.80).aspx –

+0

Uso el control webBrowser en un proyecto de WPF y no veo ese método en ninguna parte. Mover la propiedad del documento del control webBrowser parece ser del tipo de datos Object. – vikramjb

4

Para solucionar el problema es necesario sustituir la línea:

form.submit(); 

Con siguiente código:

var children = form as IEnumerable; 
var inputs = children.OfType<mshtml.HTMLInputElement>(); 
var submitButton = inputs.First(i => i.type == "submit"); 

submitButton.click(); 

Esto mostrará alerta acerca de la selección del usuario y enviar el formulario.

+0

El botón de enviar es una imagen que llama a un JS para enviar el formulario y es por eso que lo hice form.submit. – vikramjb

+0

Puede encontrar una imagen dentro del formulario (de la misma manera que lo hice con el botón Enviar) y luego haga clic en él. Te ayudará en caso de que el script que mencionas haga algo más que simplemente enviar un formulario. –

+0

Oleg tu respuesta también fue correcta, ya que, probé la muestra de John primero, le di la recompensa. – vikramjb

1

Tengo una sola línea más sucia de trabajo mediante la inyección de un JavaScript para enviar el formulario

_webBrowser.InvokeScript("eval", new object[] { "document.getElementById('formName').submit()" }); 

que ha estado trabajando para mí cuando interactúa con un sitio que utiliza una gran cantidad de JavaScript y el botón allá de la forma .

+0

Una sucia línea en verdad, pero es la única respuesta en esta página que funcionó para mí. – colton7909

Cuestiones relacionadas