2009-09-16 10 views
6

Próbuję utworzyć oprogramowanie, które w mniejszym lub większym stopniu automatyzuje wypełnianie formularzy na stronie internetowej - i zdecydowałem się użyć formantu WebBrowser w wersji System.Windows.Forms. Działa to świetnie i mogę łatwo manipulować DOM doi tak dalej. Niestety strona, na której robię automatyzację, ma ładowanie plików, które jest uruchamiane wewnątrz elementu iframe - i tutaj utknąłem, po prostu nie potrafię sobie wyobrazić, jak można manipulować elementami wewnątrz DOM elementu iframe.Formant systemu Windows Forms WebBrowser i iframes

Idealnie co chciałbym zrobić coś takiego jak:

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

a następnie przesłać formularz wewnątrz iframe oczywiście - jednak nie ma InnerDocument atrybut HtmlElement miarę widzę, ani nie ma typu, który znalazłem, że mogę rzucić HtmlElement, aby uzyskać dostęp do wewnętrznego DOM.

Jak to się robi?

Odpowiedz

8

Spróbuj użyć zamiast tego kolekcji "ramek". Od MSDN:

Funkcje elementów iframe jako dokument w dokumencie, albo jak pływającej ramce. Kolekcja ramek zapewnia dostęp do zawartości elementu iframe . Użyj kolekcji klatek do odczytu lub zapisu do elementów zawartych w elemencie iframe w postaci . Na przykład składni dostępu styl backgroundColor z wówczas Obiekt ciała w ramka zostanie:

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

+4

Aha - to było coś, o czym zapomniałem. Należy jednak zauważyć, że kod, który tutaj zamieściłeś, to javascript - odpowiedni kod potrzebny do kontroli WebBrowser to browser.Document.Window.Frames ["frame"], aby uzyskać element iframe. – kastermester

+0

@ststermester nie ma. Windows pod browser.document (po prostu zaznaczone pod żywym obiektem) i powyższy kod nie działa (w VB6 tak). czy istnieje różnica między .frames [...] a .frames (...)? tak (lub [robię różnicę? Próbowałem obu bez skutku. –