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返回一个数组。