2

我对一些 VBA 代码有非常奇怪的问题。代码是 InternetExplorer 自动化,非常简单:我只需要加载页面,输入凭据并单击另一个页面上的按钮(成功登录后)。

但是...我的代码不起作用(但仅在我在 AWS 上的一台机器上)。在我的本地机器上,这段代码运行良好。

奇怪的是它接缝我只能访问第一个加载页面的 Document 属性(我需要输入登录名/密码)。我的意思是,当我加载起始页时,MyBrowser.Document我可以从属性中看到所有字段。INPUT但成功登录后(IE 窗口可见)我从属性中看到相同 INPUT的字段MyBrowser.Document!另外(正如我所说)我对这段代码在另一个机器上没有问题。

IE 保护模式被禁用(这是 IE 11)。我认为这是某种安全问题,但我无法自己找到它......

这是我的代码:

'MyBrowser is IE instanse 
'Here I'm loading start page and input login/password
'Next the browser show me another page where I need to click a button
'But Debug messages show me input fields for the first Form!

Application.Wait (Now + TimeValue("0:00:05"))
    Do
    DoEvents
    Loop Until MyBrowser.ReadyState = READYSTATE_COMPLETE

Set HTMLDoc = MyBrowser.Document
For Each myHTML_Element In HTMLDoc.getElementsByTagName("INPUT")
If myHTML_Element.Type = "submit" And myHTML_Element.Name = "BUTTONNEWJOBS" Then myHTML_Element.Click: Exit For
Debug.Print myHTML_Element.Name
Next

更新 我不知道为什么,但我的浏览器对象总是Busy这就是我得到旧页面 HTML 的原因。我试过了.Stop,但没有运气。

4

2 回答 2

1

我没有 IE11 自动化的答案,只是提示您可能选择走的路径。

另一个堆栈溢出问题在模板引擎中呈现页面后获取页面的源代码?提供一些浏览器自动化选项。

由于 IE11 行为更改,上述工具之一目前已中断对 IE11 的支持,请参阅http://docs.seleniumhq.org/about/platforms.jsp#browsers。阻塞问题有一些您可能会发现有用的配置提示。

在我看来,从渲染兼容性、可编程性甚至不同版本的自动化问题的角度来看,Internet Explorer 始终是最不可靠的工具。尽管多年来 Internet Explorer 有所改进,但最好还是避免使用 Internet Explorer(从程序员的角度来看)。今天幸运的是,它不是唯一可用的工具。

因此,如果您只需要完成工作,您可以使用其他浏览器或类似浏览器的工具。

如果您必须使用 IE,那么您应该在Internet Explorer 开发中心 → 社区 → 开发者论坛中获得答案

编辑(评论后)

根据您问题中的症状,浏览器对象似乎很忙,因为正在向用户显示一些对话框(可能是安全提示)。来自 Google 的一些链接可能会有所帮助:

重写大约 1000 行代码以使用另一个自动化界面(或浏览器)并在 Microsoft 的 Internet Explorer 开发中心寻求帮助是 IMO 仍然有效的选项

于 2014-06-10T20:20:11.123 回答
0

根据您的以下陈述

我从 MyBrowser.Document 属性中看到相同的 INPUT 字段!

看起来页面还没有完全加载。也许它正在通过 AJAX 加载数据并单击提交按钮显示完全相同的页面(这将解释为什么您看到相同的 INPUT 字段)同时等待来自服务器的响应。

一个简单的测试方法是等待更长的时间(例如 30 秒)并忽略浏览器 ReadyState 的值。然而,更好的方法是循环,直到您在成功页面上找到不在第一页上的元素,可能超时为 30 秒。

我使用 Selenium 进行了一些自动化操作并遇到了类似的问题,不得不求助于使用隐式等待,但我不确定 VBA 是否是这样的功能(因为我不知道 VBA)

于 2014-06-07T12:06:16.430 回答