如何使用VBScript在下拉列表中设置值

时间:2015-07-02 21:49:29

标签: html vbscript

我在一家公司工作,他们有一个网站,可以访问我们位于远程位置的所有服务器。 我有一个VBScript打开网站,提供用户名和passowrd登录网站,并为我打开wesite。 它也点击我的一些链接,然后我需要更改下拉列表中的值,将显示100项(默认为10)。 我无法解决的问题是将值从10更改为100 我会告诉你我正在使用的代码

Set oIE = CreateObject("InternetExplorer.Application")
oIE.Visible = true
oIE.navigate "http://zzz.zz.zz:0000/zz/zz"
Do
    WScript.Sleep 500
Loop While oIE.ReadyState < 4 And oIE.Busy
oIE.Document.All.Item("username").Value = "zzzz"
WScript.Sleep 250
oIE.Document.All.Item("password").Value = "zzzzzz"
WScript.Sleep 250
oIE.Document.All.Item("login").submit
WScript.Sleep 100
oIE.navigate "http://zzz.zz.zz:0000/zz/zz/ca12/index.jsp?console.tab=Home&task.clear=1"
WScript.Sleep 10000
oIE.navigate "http://zzz.zz.zz:0000/zz/zz/ca12/index.jsp?task.tag=MyPasswordAccountsJSFTask"
WScript.Sleep 1000
For Each opt In oIE.document.getElementById("comObjsNum").Options
    If opt.Value = 100 Then
        opt.Selected = True
    Else
        opt.Selected = False
    End If
Next

但我无法更改下拉列表中的值。 最有可能&#34;我不知道怎么做!! &#34;

下拉列表有4个选项,即:10,25,50&amp; 100。

当我已经登录时,我在第9行也会收到错误 错误说:&#34;对象必需....&#34;

更新:使用此代码仍然出错:

Set oIE = CreateObject("InternetExplorer.Application")
oIE.Visible = true
oIE.navigate "http://zzz.zz.zz:0000/zz/zz"
Do
   WScript.Sleep 500
 Loop While oIE.ReadyState < 4 And oIE.Busy
oIE.Document.All.Item("username").Value = "zzzz"
WScript.Sleep 250
oIE.Document.All.Item("password").Value = "zzzzzz"
WScript.Sleep 250
oIE.Document.All.Item("login").submit
WScript.Sleep 100
oIE.navigate "http://zzz.zz.zz:0000/zz/zz/ca12/index.jsp?    console.tab=Home&task.clear=1"
WScript.Sleep 10000
oIE.navigate "http://zzz.zz.zz:0000/zz/zz/ca12/index.jsp?        task.tag=MyPasswordAccountsJSFTask"
   WScript.Sleep 1000
   oIE.document.getElementById("comObjsNum").selectedIndex = 3

2 个答案:

答案 0 :(得分:2)

您应该能够设置控件的selectedIndex属性:

oIE.document.getElementById("comObjsNum").selectedIndex = 3

编辑:

看到你的第二个问题。如果您已经登录,则密码字段可能不会在页面上存在。这可能是您收到错误的原因。所以你可能需要防范它:

On Error Resume Next
oIE.Document.All.Item("password").Value = "zzzzzz"
If Err Then
    ' Already logged in. Change course of action.
End If
On Error GoTo 0

答案 1 :(得分:2)

哈哈......发现它! 感谢所有回复! 和@bond一样,我怀疑它没有触发onchange事件+1但是为了快速响应

Set oIE = CreateObject("InternetExplorer.Application")
oIE.Visible = true
oIE.navigate "http://zzz.zz.zz:0000/zz/zz/"
Do
WScript.Sleep 500
Loop While oIE.ReadyState < 4 And oIE.Busy
WScript.Sleep 150
oIE.Document.All.Item("username").Value = "youdontneeedtoseeit"
WScript.Sleep 100
oIE.Document.All.Item("password").Value = "nobodycares"
WScript.Sleep 150
oIE.Document.All.Item("login").submit
Do While oIE.busy 
WScript.Sleep 500
Loop
oIE.navigate "http://zzz.zz.zz:0000/zz/zz/ca12/index.jsp?console.tab=Home&task.clear=1"
Do While oIE.busy 
WScript.Sleep 500
Loop
oIE.navigate "http://zzz.zz.zz:0000/zz/zz/ca12/index.jsp?task.tag=MyPasswordAccountsJSFTask"
Do While oIE.busy 
WScript.Sleep 500 
Loop
oIE.document.getElementById("comObjsNum").selectedIndex = 3
WScript.Sleep 100
oIE.document.getElementById("comObjsNum").FireEvent ("onchange")

我不得不在几乎每一个声明中都使用whie循环,因为该网站通常需要时间才能打开(尽管不可预测) 以及已登录的问题。我快到了,我很快就会找到它...... 我想感谢这个暗示我使用FireEvent的链接:This Link