2009-04-02 6 views
0

Ich versuche, ein .Net WebBrowser-Steuerelement zu verwenden, um mich auf einer Website anzumelden und einige Daten für mich zu sammeln. Ich verwende auch einen Verweis auf MSHTML (aber es ist mir egal, ob Ihre Lösung dies tut oder nicht).Verwendung von .Net Web Control - Wie man einen Wert in einem TextBox * INSIDE * eines IFRAME setzt

Wenn ich eine 'normale' Website besuche - erstelle ich ein mshtml.HTMLDocument aus der .documment des WebBrowsers. Dann erstelle ich ein mshtml.FormElement und ein mshtml.HTMLInputElement mit dem Namen des gewünschten Textfelds.

Dann kann ich den Wert der TextBox festlegen.

Es sieht ungefähr so ​​aus:

Dim myDoc1 As mshtml.HTMLIFrame = DirectCast(Me.WebBrowser.Document.DomDocument, mshtml.HTMLDocument) 
    Dim myForm As mshtml.HTMLFormElement = DirectCast(myDoc1.forms.item(0), mshtml.HTMLFormElement) 
    Dim myUserBox As mshtml.HTMLInputElement = DirectCast(myForm.item("user"), mshtml.HTMLFormElement) 

    myUserBox.value = UserName 

Mein Problem ist, dass die Textbox Ich brauche auf einigen Websites innerhalb eines IFRAME enthalten sind, zu manipulieren. Ein Beispiel wäre https://servicing.capitalone.com/c1/login.aspx

Wenn mein Programm zu dieser Website surft - es kann keine Textbox für den Benutzernamen finden - weil es keinen gibt. Es gibt nur ein IFRAME-Tag mit der URL 'https://login.capitalone.com/loginweb/login/login.do'

Wenn ich direkt auf die login.do-Seite surfe - die Website leitet mich auf eine Fehlerseite weiter.

Wie kann ich Daten in das Textfeld UserName in diesem IFRAME eingeben?

Antwort

2

Da der untergeordnete Iframe, auf den Sie zugreifen möchten, aus einer anderen Domäne als der übergeordneten Seite stammt, können Sie aufgrund der Cross-Frame-Skriptsicherheit nicht auf die Formularelemente des Iframes zugreifen. Siehe: Accessing Frames in the Managed HTML Document Object Model

Zugriff auf Frames durch die Tatsache, dass der verwaltete HTML DOM implementiert eine Sicherheitsmaßnahme bekannt als Cross-Frame-Scripting-Sicherheit ist kompliziert. Wenn ein Dokument ein FRAMESET mit zwei oder mehr FRAMEs in verschiedenen Domänen enthält, können diese FRAMEs nicht mit einem anderen interagieren. Mit anderen Worten, ein FRAME, der Inhalt von Ihrer Website anzeigt, kann nicht auf Informationen in einem FRAME zugreifen, das eine Website eines Drittanbieters wie hostet. Diese Sicherheit ist auf der Ebene der HtmlWindow-Klasse implementiert. Sie können allgemeine Informationen über einen Rahmen Hosting einer andere Website, wie seine URL erhalten, aber Sie werden nicht in der Lage sein Dokument zuzugreifen oder die Größe oder Ort seines Hosting-FRAME oder IFRAME zu ändern.

+0

Also - es gibt keine Möglichkeit, sich programmatisch mit einem WebBrowser-Steuerelement in die Capital One Website einzuloggen? –

+0

Ich konnte es nicht zur Arbeit bringen. Es gibt eine API für den Zugriff auf die iFrames, aber jedes Mal, wenn ich den untergeordneten Frame berührte, bekam ich eine Sicherheitsausnahme. –

+0

Ich habe eine Lösung zusammengehackt. Ich benutze SendKeys, um ein paar Mal zu Tabstopps zu gelangen, bis ich mich im richtigen Feld befinde, und gebe dann einen Benutzernamen, einen Tab, ein Passwort, eine Registerkarte und den Absenden-Button ein. Aber das ist fehlerhaft und anfällig für Fehler. Wenn jemand anderes eine bessere Lösung hat, würde mich das interessieren :) –

Verwandte Themen