2009-09-16 14 views
6

Estoy tratando de crear un programa para automatizar más o menos formularios rellenos en una página web, y he decidido usar el control WebBrowser en System.Windows.Forms. Esto funciona muy bien y puedo manipular fácilmente el DOM a través de webbrowser.Document y así sucesivamente. Sin embargo, lamentablemente, el sitio en el que estoy haciendo la automatización tiene una carga de archivos que se ejecuta dentro de un iframe, y aquí es donde estoy atascado, simplemente no puedo encontrar la manera de manipular elementos dentro del DOM del iframe.Windows Forms Control e iframes de WebBrowser

Lo ideal sería que lo que me gustaría hacer es algo como:

HtmlElement iframe = browser.Document.GetElementById("iframe_id"); 
iframe.InnerDocument.GetElementById("file_upload_input").SetAttribute("value", "myfile.txt"); 

Y a continuación, enviar el formulario dentro del marco flotante, por supuesto, - sin embargo no hay InnerDocument atributo en HtmlElement por lo que yo puedo ver, ni ningún tipo que he encontrado que puedo convertir HtmlElement para que pueda acceder al DOM interno.

¿Cómo se hace esto?

Respuesta

8

Pruebe usar la colección "marcos" en su lugar. De MSDN:

Las funciones elemento IFRAME como un documento dentro de un documento, o como un marco flotante . La colección de marcos proporciona acceso a los contenidos de un iframe . Utilice la colección de marcos para leer o escribir en elementos contenidos en un iframe. Por ejemplo, la sintaxis para acceder al estilo backgroundColor de el objeto cuerpo en un marco flotante es:

sColor = document.frames ("sFrameName") document.body.style.backgroundColor;.

+4

Aha - eso era algo que había olvidado. Una cosa a tener en cuenta aquí es que el código que publicaste aquí es javascript: el código correspondiente necesario para el control WebBrowser es browser.Document.Window.Frames ["frame"] para obtener el elemento iframe. – kastermester

+0

@kastermester no hay .Window debajo de browser.document (simplemente marcado en el objeto vivo) y el código anterior no funciona (en VB6 de todos modos). ¿Hay alguna diferencia entre .frames [...] y .frames (...)? entonces (o [¿hacer una diferencia? ive intenté tanto en vano]. –

Cuestiones relacionadas