VBScript可以自动登录网站并通过CreateObject(InternetExploerer)执行操作吗?

Can VBScript automatically log into a website and perform actions via CreateObject(InternetExploerer)?

我有一个应用程序用来玩基于文本的游戏。这个应用程序内置了脚本,所以您可以创建自己的插件。它支持各种脚本语言,如JScript、VBScript和Lua。我要做的是创建一个插件,它能够登录到网站上的一个帐户,然后执行各种操作,如单击按钮或提交信息。我对此做了很多研究,并取得了一定程度的进展,但我一直遇到一些问题。我不确定我所要做的事情是否可能以我所要做的方式实现。

到目前为止,我已经能够打开浏览器并使用CreateObject导航到一个页面。

1
2
3
4
5
6
7
8
function WindowLoad
     IE.Document.getElementByID("user").value ="testacct"
end function
Dim IE
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = 1  
IE.navigate"http://www.mudconnect.com/SMF/index.php?action=login2"
Set IE.Window.OnLoad = GetRef("WindowLoad")

我现在正试图找出一种方法,用我的信息填充输入字段。起初我尝试使用ie.document.getElementByID(),但它显示了以下错误消息:object required:'document.getElementByID(…)'

在做了一些研究之后,我发现这可能是因为它试图在页面加载之前找到元素。所以我决定试试onload方法。然而,现在我似乎找不到任何方法来引用"window"。我尝试过ie.window.onload、ie.document.window.onload和其他一些引用,但它总是说:对象不支持此属性或方法:"window"。有人对我有什么建议吗?

我也尝试过:

1
2
3
4
Do While (IE.Busy)

 Loop
 IE.Document.getElementByID("user").value ="testacct"

我已设法自动填写并提交了表格。我的下一个目标是能够在登录时导航并执行其他操作,如投票。我想在我的客户中设置一个计时器,每天投票一次,以防我忘记投票。但是,当我尝试执行另一个导航时,浏览器的行为似乎不稳定。这是我更新的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dim pause
Dim IE
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = 1  
IE.navigate"http://www.mudconnect.com/SMF/index.php?action=login"
while IE.Busy
   pause = pause + 1
wend
world.note pause
IE.Document.Forms(1).Action ="http://www.mudconnect.com/SMF/index.php?action=login2"
IE.Document.Forms(1).Elements(0).value ="myUserName"
IE.Document.Forms(1).Elements(1).value ="myPass"
IE.Document.Forms(1).Submit
while IE.Busy
    pause = pause + 1
wend
world.note pause
IE.navigate"http://www.mudconnect.com/cgi-bin/vote_rank.cgi?mud=Legends+of+the+Jedi"
while IE.Busy
    pause = pause +1
wend
world.note pause
IE.Document.Forms(0).Submit

由于某种原因,它似乎没有导航到新页面。它不知何故会被发送到网站上的其他地方。另一个问题似乎是,如果我设置了一个导航到其他地方,它不会让我登录。我花了好几个小时阅读了IE对象文档,但我似乎不知道问题是什么。我还想知道,当您导航到一个新的URL时,IE.document值是否会得到更新?

我解决了这部分问题。对于处理这些特定问题的任何人,我的最佳建议是密切关注页面上的表单和元素的数量。把每一个窗体看作是"窗体"数组中的一个槽。然后在每一个窗体中都有一个"元素"数组。我的许多问题是由于没有在数组中标识正确的"窗体"或"元素"。

但是,我仍然无法让这个脚本登录并在之后导航。我根据这一点开发的解决方案包括创建一个新的IE对象,并让它为我完成任务。让IE对象第二次导航会更优雅,但我无法理解。现在我要把这个标记为已解决,因为我已经找到了一种方法使它工作,但我很好奇是否有一种方法可以解决我所遇到的问题。


最简单的事情就是在繁忙的酒店等待。

1
2
3
4
5
6
7
8
Dim IE
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = 1  
IE.navigate"http://www.mudconnect.com/SMF/index.php?action=login2"
While IE.Busy
  WScript.Sleep 1000
Wend
IE.Document.getElementsByName("user")(0).value ="testacct"

我相信wscript.sleep对睡眠有效,但如果不看这个答案。我从来没有使用过vbscript,但是无论语言如何,原理都是一样的。

另一个问题是,我在访问该页面时注意到,没有元素具有ID"user"。有一个输入框中有用户名user,但这是不同的。但是,GetElementsByName返回一个数组。