Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 为什么我只能以编程方式访问第一个加载的页面?_Vba_Internet Explorer_Webautomation - Fatal编程技术网

Vba 为什么我只能以编程方式访问第一个加载的页面?

Vba 为什么我只能以编程方式访问第一个加载的页面?,vba,internet-explorer,webautomation,Vba,Internet Explorer,Webautomation,我对一些VBA代码有一个非常奇怪的问题。代码是InternetExplorer automation,非常简单:我只需要加载页面,输入凭据并单击另一个页面上的按钮(成功登录后) 但是。。。我的代码不工作(,但仅在AWS上的一台机器上运行)。在我的本地机器上,这个代码运行良好 奇怪的是,我只能访问第一个加载页面的Document属性(在这里我需要输入login/password)。我的意思是,从MyBrowser.Document属性中,我可以在加载起始页时看到所有INPUT字段。但是在成功登录(

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

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

奇怪的是,我只能访问第一个加载页面的Document属性(在这里我需要输入login/password)。我的意思是,从
MyBrowser.Document
属性中,我可以在加载起始页时看到所有
INPUT
字段。但是在成功登录(IE窗口可见)后,我从
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
更新
我不知道为什么,但我的浏览器对象总是
,这就是我得到旧页面HTML的原因。我试图停止它,但没有运气。

基于你的以下陈述

我在MyBrowser.Document属性中看到了相同的输入字段

看起来页面还没有完全加载。可能是通过AJAX加载数据,然后单击submit按钮在等待服务器响应时显示完全相同的页面(这可以解释为什么您看到相同的输入字段)

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


我用Selenium做了一些自动化工作,遇到了类似的问题,不得不求助于使用,但我不确定VBA是否是这样一种功能(因为我不知道VBA)

我没有IE11自动化的答案,只是一个你可以选择走的路径的提示

另一个堆栈溢出问题提供了一些浏览器自动化选项

由于IE11行为的改变,上述工具之一目前已经破坏了对IE11的支持,请参阅。阻塞问题已经解决,您可能会发现它很有用

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

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

如果你必须使用IE,那么你应该在

编辑(评论后)

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

  • selenium浏览器自动化引擎所需的IE配置-
  • 如何禁用Internet Explorer增强的安全配置-
  • Internet Explorer安全区域和兼容性视图-
  • 可由iMacros Internet Explorer自动化工具包操作的一组对话框-

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

是否可以共享html代码?是否有效?通常,ReadyState并不足以确定文件是否已加载,您可能会遇到大量与此相关的模糊问题。尝试添加该函数而不是Do/Loop。@enderland Hmmm。。。在尝试了你的代码之后,我发现我的浏览器总是很忙。你是如何实例化IE的?你试过了吗?是的,我试过InternetExplorerMediumAs。我说过我对相同的代码没有问题,但是在另一台机器上(另一个版本的MS Office(2013 vs 2007)和另一个级别的UAC)。此外,我已经玩过Wait param…不幸的是,我没有检查你的解决方案(一些注册表黑客),因为我已经降级到IE10。我不能使用IE以外的浏览器,因为我有大约1000行IE代码。