如何在Windows XP的Internet Explorer 8中的文本框中输入文本?

时间:2014-05-06 11:37:36

标签: vbscript

首先,除了Win XP和IE 8之外,我不能使用任何不同的软件/操作系统。

其次我只能使用VB Script来实现这一目标。

第三,我正在尝试的代码:

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 500
Set objShell = CreateObject("WScript.Shell")
WScript.Sleep 500
objShell.AppActivate "title of page - Windows Internet Explorer" 


WScript.Sleep 500
WshShell.SendKeys "{TAB}"
WScript.Sleep 500
objShell.SendKeys "{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}"
WScript.Sleep 500
WshShell.SendKeys "05/30/2014"
WScript.Sleep 500
WshShell.SendKeys "{TAB}"
WScript.Sleep 500
WshShell.SendKeys "{TAB}"
WScript.Sleep 500
objShell.SendKeys "{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}{DELETE}"
WScript.Sleep 500
WshShell.SendKeys "05/31/2014"
WScript.Sleep 500
WshShell.SendKeys "{TAB}"
WScript.Sleep 500
WshShell.SendKeys "{TAB}"
WScript.Sleep 500
WshShell.SendKeys "{TAB}"
WScript.Sleep 500
WshShell.SendKeys "{TAB}"
WScript.Sleep 500
WshShell.SendKeys "{DOWN}"
WScript.Sleep 500  
WshShell.SendKeys "{DOWN}"
WScript.Sleep 500
WshShell.SendKeys "{DOWN}"
WScript.Sleep 500
WshShell.SendKeys "{DOWN}"
WScript.Sleep 500


x=msgbox("MACRO HAS FINISHED RUNNING!!!" ,0, "MACRO HAS FINISHED RUNNING!!!")

问题是它似乎总是跳过第一个文本框,它试图进入一个网页,在第六行,我已经指出WshShell.SendKeys "05/30/2014"它只是不会进入文本框中网页,我已经尝试搞乱代码,使用WShShell而不是WScript,以不同的方式运行代码,将睡眠从500改为其他不同的时间,这里我总是缺少为什么它会进入第一个文本网页上的框?我需要在我的代码中输入一些东西来使其工作,比如变量或其他什么东西?

请注意我把“页面标题”放在顶部附近我出于安全原因省略了页面的真实标题。

1 个答案:

答案 0 :(得分:3)

不要将SendKeys用于GUI自动化。这非常非常非常不可靠。 SendKeys就像打字蒙眼 - 你无法确定是否将钥匙发送到正确的物体,因为其他窗户可以随时从你的目标中偷取输入焦点。

在您的情况下,您可以使用Internet Explorer的脚本对象 - InternetExplorer.Application。它允许您访问网页的DOM(Document Object Model),因此您可以输入数据,单击链接和按钮,提交表单并以编程方式导航网页。

Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True

objIE.Navigate "https://twitter.com/search-home"

While objIE.Busy
  WScript.Sleep 100
Wend

objIE.Document.getElementById("search-home-input").value = "haiku"
objIE.Document.getElementsByClassName("search-btn")(0).click

要连接到已打开的网页,您可以使用以下功能代替CreateObject("InternetExplorer.Application")

Set objIE = GetIE("Twitter / Search")
...

Function GetIE(Title)
  Dim objShell, objIE
  Set objShell = CreateObject("Shell.Application")
  For Each objIE In objShell.Windows
    If InStr(objIE.LocationName, Title) > 0 Then
      Set GetIE = objIE
      Exit Function
    End If
  Next
End Function

此代码按标题搜索网页。要按网址而不是标题进行搜索,请替换

If InStr(objIE.LocationName, Title) > 0 Then

If InStr(objIE.LocationURL, Title) > 0 Then