0

我正在尝试使用 .Net WebBrowser 控件登录网站并为我汇总一些数据。我还使用了对 MSHTML 的引用(但我不在乎您的解决方案是否有效)。

当我访问“普通”网站时 - 我从 webBrowser 的 .documment 创建了一个 mshtml.HTMLDocument。然后我使用我想要的文本框的名称创建一个 mshtml.FormElement 和一个 mshtml.HTMLInputElement。

然后,我可以设置文本框的值。

它看起来像这样:

    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

我的问题是,在某些网站上,我需要操作的文本框包含在 IFRAME 中。一个例子是https://servicing.capitalone.com/c1/login.aspx

如果我的程序浏览到那个站点——它找不到用户名的文本框——因为没有。只有一个 IFRAME 标记的 URL 为“ https://login.capitalone.com/loginweb/login/login.do

如果我直接浏览 login.do 页面 - 网站会将我重定向到错误页面。

如何在该 IFRAME 的用户名文本框中输入数据?

4

1 回答 1

2

由于您尝试访问的子 iframe 来自与父页面不同的域,因此由于跨框架脚本安全性,您将无法访问 iframe 的表单元素。请参阅:访问托管 HTML 文档对象模型中的框架

由于托管 HTML DOM 实施了一种称为跨框架脚本安全性的安全措施,因此访问框架变得复杂。如果一个文档包含一个在不同域中具有两个或多个 FRAME 的 FRAMESET,则这些 FRAME 不能相互交互。换言之,显示您网站内容的 FRAME 无法访问托管第三方网站(例如 http://www.adatum.com/ )的 FRAME 中的信息。此安全性在 HtmlWindow 类的级别实现。您可以获得有关托管另一个网站的 FRAME 的一般信息,例如其 URL,但您将无法访问其文档或更改其托管 FRAME 或 IFRAME 的大小或位置。

于 2009-04-02T23:45:29.317 回答