VBScript能否通过CreateObject(InternetExplorer)自动登录网站并执行操作?

8 浏览
0 Comments

VBScript能否通过CreateObject(InternetExplorer)自动登录网站并执行操作?

我有一个应用程序用来玩基于文本的游戏。这个应用程序内置了脚本功能,可以创建自己的插件。它支持多种脚本语言,如JScript、VBScript和LUA。我想要做的是创建一个插件,能够登录到一个网站的账户,然后执行一些操作,比如点击按钮或提交信息。我已经进行了大量的研究,并取得了一定的进展,但是我一直遇到问题。我不确定我所尝试的方式是否可行。

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

现在我正在尝试找到一种方法来填充输入字段。起初我尝试使用IE.Document.getElementByID(),然而它显示出这个错误信息:Object required: 'Document.getElementByID(...)'。

经过一些研究,我发现这可能是因为它在页面加载之前就尝试找到元素。所以我决定尝试OnLoad方法。然而现在我似乎找不到任何引用"Window."的方法。我尝试了IE.Window.Onload、IE.Document.Window.Onload和其他几个引用,但是它一直提示:Object doesn't support this property or method: 'Window'。有人有任何建议吗?

我也尝试过:

当我尝试执行另一个导航时,浏览器的行为似乎不稳定。这是我的更新代码:

它似乎无法导航到新页面的原因不明。它在某种程度上被发送到了网站的其他地方。另一个问题似乎是,如果我设置一个导航到其他地方,它不会登录。我花了几个小时阅读IE对象文档,但是我似乎无法弄清楚问题所在。我还想知道当你导航到一个新的URL时,IE.Document的值是否会更新?

我解决了这个问题的一部分。对于那些遇到类似问题的人,我最好的建议是仔细注意页面上表单和元素的数量。将每个表单视为“forms”数组中的一个插槽。然后在每个表单中,还有一个“elements”的数组。很多问题都是因为没有正确识别“forms”或“elements”数组中的适当“form”或“element”导致的。

然而,我仍然无法让这个脚本在登录后导航。在这个问题上,我制定的解决方案涉及创建一个新的IE对象,并让它完成任务。让IE对象第二次导航会更加优雅,但是我无法弄清楚如何做到这一点。目前我将这个问题标记为已解决,因为我找到了一个解决办法,但是我很好奇是否有办法解决我遇到的问题。

0
0 Comments

问题的原因是VBScript中的WScript.Sleep方法可能不被支持,同时找不到具有id为"user"的元素。解决方法是使用其他方法来等待页面加载完成,如使用While循环等待Busy属性为False,或者使用其他延迟方法。此外,可以使用getElementsByName方法获取元素数组,然后通过索引选择对应的元素。如果仍然无法登录网站,可以尝试使用Fiddler等工具来查看发送的内容,以找到问题所在。

以下是整理后的文章:

VBScript自动登录网站并执行操作的方法是通过CreateObject("InternetExplorer.Application")来创建Internet Explorer对象,然后使用该对象的属性和方法进行操作。然而,在实际应用中可能会遇到一些问题。

首先,WScript.Sleep方法可能不被VBScript支持。可以尝试使用其他方法来等待页面加载完成,如使用While循环等待Busy属性为False。具体代码如下:

While IE.Busy
  WScript.Sleep 1000
Wend

如果WScript.Sleep方法无效,可以参考其他解决方案。

其次,有时无法找到具有id为"user"的元素。在某个网页中,虽然有一个名为"user"的输入框,但它的属性是name而不是id。可以使用getElementsByName方法来获取元素数组,然后通过索引选择对应的元素。具体代码如下:

IE.Document.getElementsByName("user")(0).value = "testacct"

另外,如果仍然无法成功登录网站,可以尝试使用Fiddler等工具来查看发送的内容,以便找到问题所在。

总之,通过使用上述方法,可以实现VBScript自动登录网站并执行操作的功能。希望这些方法能够帮助到你解决问题。

0