Internet explorer VBScript sendKeys已打开IE窗口

Internet explorer VBScript sendKeys已打开IE窗口,internet-explorer,vbscript,sendkeys,Internet Explorer,Vbscript,Sendkeys,我是VBScript新手,对于已打开IE窗口的sendKeys有一个问题 最初,我有一个脚本,它打开了一个新的Internet Explorer实例,在文本字段中写入了一些文本,并单击了一个按钮: Set shell = WScript.CreateObject("WScript.shell") Set IE = WScript.CreateObject("InternetExplorer.Application", "ie_") Wait IE, 2000 IE.Visible = True

我是VBScript新手,对于已打开IE窗口的sendKeys有一个问题

最初,我有一个脚本,它打开了一个新的Internet Explorer实例,在文本字段中写入了一些文本,并单击了一个按钮:

Set shell = WScript.CreateObject("WScript.shell")
Set IE = WScript.CreateObject("InternetExplorer.Application", "ie_")

Wait IE, 2000
IE.Visible = True
shell.AppActivate IE

Wait IE, 2000
IE.Navigate "http://someurl"

Wait IE, 2000
IE.document.getElementById("myTextField").Click
shell.SendKeys "TEST"
Wait IE, 2000
IE.document.getElementById("myButton").Click
...
IE.Quit

End Function

Sub Wait(IE, ms)
    Do
        WScript.Sleep ms
    Loop While IE.ReadyState < 4 And IE.Busy
End Sub
Set shell=WScript.CreateObject(“WScript.shell”)
设置IE=WScript.CreateObject(“InternetExplorer.Application”、“IE”)
等等,2000年
可见=真实
shell.AppActivate
等等,2000年
即“导航”http://someurl"
等等,2000年
IE.document.getElementById(“myTextField”)。单击
shell.SendKeys“测试”
等等,2000年
IE.document.getElementById(“myButton”)。单击
...
即退出
端函数
分段等待(即ms)
做
WScript.Sleep ms
当IE.ReadyState<4且IE.Busy时循环
端接头
这工作做得非常好。 但是,现在我需要对一个已经打开的IE实例执行相同的操作,这就是我所做的:

Set shell = WScript.CreateObject("WScript.shell")

Dim objInstances, objIE, IE
Set objInstances = WScript.CreateObject("Shell.Application").windows
If objInstances.Count > 0 Then '/// make sure we have instances open.
    For Each objIE In objInstances
        If InStr(objIE.LocationURL,"http://someurl") > 0 then
        Set IE = objIE
        End if
Next
End If
shell.AppActivate ("Internet Explorer")

Wait IE, 2000
IE.document.getElementById("myTextField").Click
shell.SendKeys "TEST"
Wait IE, 2000
IE.document.getElementById("myButton").Click
...
IE.Quit

End Function

Sub Wait(IE, ms)
    Do
        WScript.Sleep ms
    Loop While IE.ReadyState < 4 And IE.Busy
End Sub
Set shell=WScript.CreateObject(“WScript.shell”)
模糊的物体
设置objInstances=WScript.CreateObject(“Shell.Application”).windows
如果objInstances.Count>0,则“///确保打开了实例。
对于对象中的每个对象
如果安装(对象位置URL,“http://someurl然后>0
设置IE=objIE
如果结束
下一个
如果结束
shell.AppActivate(“Internet Explorer”)
等等,2000年
IE.document.getElementById(“myTextField”)。单击
shell.SendKeys“测试”
等等,2000年
IE.document.getElementById(“myButton”)。单击
...
即退出
端函数
分段等待(即ms)
做
WScript.Sleep ms
当IE.ReadyState<4且IE.Busy时循环
端接头
这一次,文本不会写入文本字段。
有人对此有解决方案吗?

如果要设置textfield的值,可以使用
IE.document.getElementById(“myTextField”).Value

更改这两行:

IE.document.getElementById("myTextField").Click
shell.SendKeys "TEST"
进入:


我找到了一个对我有效的解决方案:不是通过IE.document.getElementById(“myTextField”)在文本字段中单击。单击,而是通过IE.document.getElementById(“myTextField”).focus将焦点设置为文本字段。

是的,这通常有效。然而,在我的例子中,textfield正在侦听keyup事件以将输入存储在某个变量中进行处理,因此我需要实际地在textfield中“键入”。您是否添加了断点来调试代码?调试代码时是否有错误?如果可能的话,我认为最好是提供自动处理的web元素的链接或html代码。不幸的是,由于它与工作相关,我不允许显示实际的代码,无论是html还是VBScript。我找到了一个对我有效的解决方案:而不是通过IE.document.getElementById在文本字段中单击(“myTextField”)。单击,我使用IE.document.getElementById(“myTextField”).focus将焦点设置为textfield。您可以将您的解决方案发布为答案,并在48小时后将其标记为可接受的答案,当该答案可供标记时。它可以在将来帮助其他社区成员解决类似问题。感谢您的理解。
IE.document.getElementById("myTextField").Value = "TEST"