用于填充IE字段的VBS脚本:难以使用iframe

时间:2012-10-14 10:58:55

标签: internet-explorer iframe vbscript field populate

我经常将数据输入第三方数据库。我正在尝试制作一个简单的VBscript,它将从我自己的Excel电子表格中提取数据并将其放在Internet Explorer的第三方条目表单中。除了我在报名表上找到iframe之外,这个过程很有效。真的很感激任何帮助。我是新手。

我需要在启动VBS(长篇故事)之前已经打开表单,所以我的脚本需要查找打开的页面。我发现了一个已经完成此操作的脚本。我已经创建了一个演示系统,它是这样的:

的index.htm

<html>
<body>

<p>First input box is on the_index.htm (main document).</p>
<input id="title" name="title-1" style="width: 220px;" title="enter title" type="text" value="">

<br /><br /><br /><br />
<iframe frameborder="0" id="input_frame" marginheight="0" marginwidth="0" name="input_frame" src="the_iframe.htm">

</body>
</html>

the_iframe.htm

<html>
<body>
<p>Second input box is on the_iframe.htm (iframe called from the main document).</p>
<input id="title" name="title-1" style="width: 220px;" title="enter title" type="text" value="">
</body>
</html>

然后我的VBS目前看起来像这样(遗憾的是必须托管演示htms,以便脚本可以找到页面(参见第一行):

inputscript.vbs

surl ="http://www.website.com/index.htm"
set ie = nothing
set shapp=createobject("shell.application")
on error resume next
For Each owin In shapp.Windows
     if left(owin.document.location.href,len(surl))=surl then
        if err.number = 0 then
        set ie = owin
          end if     
    end if
err.clear
Next
on error goto 0
if ie is nothing then
    wscript.echo "Window Not Open"

else
IE.Document.All.Item("title").Value = "wheee1"
IE.Document.frames("input_frame").All.Item("title").Value = "wheee2"
end if

“wheee1”部署工作正常,但是wheee2生成'对象不支持此属性或方法:'ie.document.frames(...)。全部'。如果我摆脱'.All',则错误是'找不到成员'。

有谁可以告诉我这里有一个简单的解决方法吗?

2 个答案:

答案 0 :(得分:0)

你可以通过IE.Document.frames("input_frame")获得框架窗口。由于它不是文档,因此您还需要包含Document来解决此问题。

IE.Document.Frames("input_frame").Document.All("title").Value = "wheee2"

答案 1 :(得分:0)

我很欣赏这是一篇文章,但对于那些在这里施加压力的人来说,我使用的是“有点”的解决方案。

要获得一个打开的窗口 - 这只有在您使用IE查看时才有效,firefox等不会注册此代码:

 For Each AW in CreateObject("Shell.Application").Windows 
  

'AW =活动Windows

   If Typename(AW.Document) = "HTMLDocument" Then 
  

'这会选择Open Window文件夹,并且会因此而崩溃   检查

     If InStr(1,AW.Document.Title,<String HTML Title>) > 0 Then Exit For
   End If
 Next
  

'AW将成为你所用的HTML wiindow,可以像创建一样使用   一个IE对象,

例如。

Set oIe = CreateObject("InternetExplorer.Application")

另外,与Excel接口的对象是:

Set xl = CreateObject("Excel.Application")

然后你可以调用xl。你正常的vba命令

xl.workbook().worksheets().cells().value etc

IFrame部分 - 这个问题的难点在于它是一个Window对象而不是文档对象

所以你有了活动窗口,并且想要导航到iframe:

Set iFra = AW.Document.GetElementById(<String - iframe id>)

或 集合:

For each iFra in AW.Document.GetElementsByTagName("iframe")
  iFra...
Next

获得iframe后,您需要使用.ContentWindow属性

从上面的iFra.ContentWindow

可以像AW 1一样使用它们来获取所有嵌套属性

例如

iFra.ContentWindow.Document.GetElementById(<String - ID>).Value = "Sorted"

注意使用它时,如果内容刷新,则需要重新获取iframe对象(上面设置IFra命令)

在IE浏览器中使用IE开发人员(默认情况下为f12)时,如果在iframe中激活你想要的字段然后在开发人员中刷新HTML,那么你应该能够将if元素与ifram一起使用内容。