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

时间:2014-09-06 19:03:22

标签: vbscript

我有一个用于播放基于文本的游戏的应用程序。此应用程序内置了脚本,因此您可以创建自己的插件。它支持各种脚本语言,如JScript,VBScript和LUA。我想要做的是创建一个能够登录网站帐户然后执行各种操作的插件,例如单击按钮或提交信息。我已经对此做了大量研究,并取得了一定程度的进展,但我一直在遇到问题。我不确定我试图完成的事情是否可能以我试图做到的方式完成。

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

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(),但它显示此错误消息:所需对象:' Document.getElementByID(...)'

在做了一些研究后,我发现这可能是因为它在页面加载之前试图找到元素。所以我决定尝试OnLoad方法。但是现在我似乎找不到任何方法来引用" Window。"我已经尝试过IE.Window.Onload,IE.Document.Window.Onload和其他几个引用,但它一直说:对象不支持这个属性或方法:' Window' 。有人对我有什么建议吗?

我也尝试过:

Do While (IE.Busy) 

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

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

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对象文档,但我似乎无法弄清问题是什么。我也很好奇每当你导航到新网址时IE.Document值是否会更新?

我解决了这部分问题。我对处理这些特定问题的人提出的最好建议是密切关注页面上表单和元素的数量。将每个表单视为"表格数组中的一个插槽。"然后在这些形式中,还有一系列的元素。"元素。我的很多问题都是由于没有找到合适的形式而造成的。或"元素"在数组内。

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

1 个答案:

答案 0 :(得分:1)

最简单的事情是等待Busy物业。

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可以用于睡眠,但如果不是look at this answer。我从未使用过VBScript,但无论语言如何,原则都是一样的。

当我访问该页面时,我注意到的另一个问题是没有元素具有id" user。"这是一个带有名称用户的输入框,但它们有所不同。 getElementsByName返回一个数组。