使用.Net Web控件-如何在IFRAME的文本框*内部*中设置值

使用.Net Web控件-如何在IFRAME的文本框*内部*中设置值,.net,browser,webbrowser-control,.net,Browser,Webbrowser Control,我正在尝试使用.Net WebBrowser控件登录到网站并为我聚合一些数据。我还使用了对MSHTML的引用(但我不在乎您的解决方案是否引用) 当我访问一个“普通”网站时,我会从webBrowser的.documment创建一个mshtml.HTMLDocument。然后,我使用所需文本框的名称创建一个mshtml.FormElement和一个mshtml.HTMLInputElement 然后,我可以设置文本框的值 它看起来像这样: Dim myDoc1 As mshtml.HTMLI

我正在尝试使用.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中。例如

如果我的程序浏览到那个网站,它找不到用户名的文本框,因为没有。只有一个IFRAME标记的URL为“”

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


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

由于您尝试访问的子IFRAME来自与父页面不同的域,因此由于跨框架脚本安全性,您将无法访问IFRAME的表单元素。见:

框架的访问因以下因素而变得复杂: 事实上,托管HTMLDOM 实现称为 跨帧脚本安全。如果 文档包含一个具有两个 不同域中的一个或多个帧, 这些框架不能相互作用 另一个换句话说,一个框架 显示网站中的内容 无法访问帧中的信息 托管第三方站点的,如 . 这种安全 是在 HtmlWindow类。你可以得到 关于框架的一般信息 托管另一个网站,如 URL,但您将无法访问 它的文档或更改大小或 其宿主框架或 IFRAME


所以-没有办法使用WebBrowser控件以编程方式登录Capital One网站?我无法让它工作。有一个用于访问iFrame的API,但每当我接触子框架时,就会出现一个安全异常。我已经破解了一个解决方案。我使用SendKeys进行了几次tab操作,直到进入正确的字段,然后输入用户名、tab、密码、tab,然后单击submit按钮。但这是错误的,而且容易出错。如果其他人有更好的解决方案,我很想听听:)