2009-09-16 4 views
6

Sto cercando di creare un software per automatizzare più o meno i riempimenti di moduli in una pagina Web e ho deciso di utilizzare il controllo WebBrowser in System.Windows.Forms. Funziona perfettamente e posso facilmente manipolare lo DOM tramite webbrowser.Document e così via. Tuttavia, sfortunatamente il sito su cui sto automatizzando ha un upload di file che viene eseguito all'interno di un iframe - ed è qui che sono bloccato, semplicemente non riesco a capire come essere in grado di manipolare gli elementi all'interno del DOM dell'iframe.Controllo WebBrowser di Windows Form e iframe

Idealmente quello che mi piacerebbe fare è qualcosa di simile:

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

E poi inviare il modulo all'interno del iframe, naturalmente - ma non c'è InnerDocument attributo HtmlElement per quanto posso vedere, né nessun tipo che ho trovato che posso lanciare HtmlElement in modo da poter accedere al DOM interno.

Come si fa?

risposta

8

Provare a utilizzare la raccolta "frame". Da MSDN:

Le funzioni elemento IFRAME come un documento all'interno di un documento, o come un frame mobile . La collezione di cornici fornisce l'accesso ai contenuti di un iframe . Utilizzare la raccolta di frame su leggere o scrivere sugli elementi contenuti in un iframe. Ad esempio, la sintassi per accedere lo stile backgroundColor della dell'oggetto corpo in un iframe è:

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

+4

Aha - era qualcosa che avevo dimenticato. Una cosa da notare qui è che il codice che hai postato qui è javascript: il codice corrispondente necessario per il controllo WebBrowser è browser.Document.Window.Frames ["frame"] per ottenere l'elemento iframe. – kastermester

+0

@kastermester non c'è nessuna finestra sotto browser.document (appena controllato sotto live object) e il codice sopra riportato non funziona (comunque in VB6). c'è una differenza tra .frames [...] e .frames (...) ?? così (o [fare la differenza? ive ha provato entrambi senza alcun risultato. –