首先,除了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改为其他不同的时间,这里我总是缺少为什么它会进入第一个文本网页上的框?我需要在我的代码中输入一些东西来使其工作,比如变量或其他什么东西?
请注意我把“页面标题”放在顶部附近我出于安全原因省略了页面的真实标题。
答案 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