我对一些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
但没有运气。
答案 0 :(得分:1)
我没有IE11自动化的答案,只是提示您选择行走的路径。
另一个Stack Overflow问题Getting source of a page after it's rendered in a templating engine?提供了一些浏览器自动化选项。
由于IE11的行为改变,上述工具之一目前已经破坏了对IE11的支持,请参阅http://docs.seleniumhq.org/about/platforms.jsp#browsers。阻止问题有some configuration hints您可能会觉得有用。
在我看来,从渲染兼容性,可编程性甚至不同版本的自动化问题的角度来看,Internet Explorer始终是最不可靠的工具。虽然多年来它已经有所改进,但是从程序员的角度来看,仍然可以避免使用Internet Explorer。今天幸运的是它不是唯一可用的工具。
因此,如果您只是需要完成工作,可以使用其他浏览器或类似浏览器的工具。
如果你必须使用IE,那么你应该在Internet Explorer Dev Center → Community → Developer forums
得到答案编辑(评论后)
根据您问题中的症状,由于某些对话框(可能是安全提示)正在向用户显示,因此浏览器对象看起来很忙。谷歌的一些链接可能有所帮助:
重写~1000行代码以使用另一个自动化界面(或浏览器)并在Microsoft的Internet Explorer开发中心寻求帮助是IMO仍然有效的选项
答案 1 :(得分:0)
基于您的以下陈述
我在MyBrowser.Document属性中看到了相同的INPUT字段!
看起来页面还没有完全加载。也许它是通过AJAX加载数据并单击提交按钮显示完全相同的页面(这可以解释为什么你看到相同的INPUT字段),同时等待来自服务器的响应。
测试此方法的一种简单方法是等待更长的时间(例如30秒)并忽略浏览器ReadyState的值。然而,更好的方法是循环,直到您在成功页面上找到不在第一页上的元素,可能超时可能为30秒。
我已经使用Selenium做了一些自动化并遇到了类似的问题而不得不求助于使用Implicit Waits但是我不确定VBA是否是这样的功能(因为我不知道VBA)< / p>